Введение - AlexTunder/ossa GitHub Wiki
Типы данных
Рассмотрим содержимое файла по адресу /core/types.h. Там на первых строчках кода мы можем обнаружить структуру UserList. Она хранит список всех никнеймов (username) пользователей. Самой структуры User как таковой не существует. User — это некоторая абстракция, которая призвана для облегчения понимания и обращения, а также получения данных о самом пользователе через вспомогательные функции. Зачастую к пользователю для получения информации о нём обращаются всего одним числом (uid = userid) — индексом в односвязном списке имён пользователей. Ниже представлен классический вид структуры UserList:
struct UserList {
char *name;
#ifdef ENABLE_ACCESS
int access;
#endif
struct UserList *next;
};
К ней мы вернёмся чуть попозже. Сейчас рассмотрим абстрактную структуру данных User. Она состоит из трех уровней абстракции:
- Реальные переменные. Только они и хранятся в памяти. К ним относятся: само имя пользователя (username), флаг или маска доступа (access)
- Мнимые переменные. Это те, что не существуют, но вычисляются путём алгоритмов, поиска или подобных. К ним можно отнести: идентификатор пользователя (uid), полную маску доступа, так как маска пользователя и маска роли, которой принадлежит этот пользователь, могут различаться, а полная маска получается в результате их совмещения
- Непрямые переменные. Они относятся к абстракции User, но хранятся в других структурах и/или абстракциях. К ним относятся: роли, псевдонимы, маски доступа самих ролей