Введение - 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, но хранятся в других структурах и/или абстракциях. К ним относятся: роли, псевдонимы, маски доступа самих ролей