diff --git a/2. Заголовочные файлы.md b/2. Заголовочные файлы.md index f9d4a06..963f41f 100644 --- a/2. Заголовочные файлы.md +++ b/2. Заголовочные файлы.md @@ -28,6 +28,42 @@ Где первые два предоставляют доступ к внутренним реализациям работы с памятью для пользовательского кода (в том числе повторяя или являясь оберткой над функционалом стандартной библиотеки), а последний - предоставляет методы для генерации C-строк (с основанием на значении **vtype**). +#### Система Generics и принципы именования + +Так как каждый контейнер, поставляемый в рамках данного проекта, предполагает работу с целым набором типов и должен обеспечивать корректную обработку всех возможных поступающих значений, для каждого допустимого типа, в рамках решаемой задачи, задекларирован и реализован собственный символ. + +Например в файле [include/array.h](https://gogs.lirent.ru/lirent/libcdsb/src/master/include/array.h) можно увидеть, что там присутствует набор символов `libcdsb_array_push_`, каждый из которых имеет свой уникальный постфикс. +Постфикс всегда соответсвует типу, для которого создается вариант метода, а также никогда не изменяется в пределах проекта, при соответсвтии аналогичному типу, но в рамках иных методов. + +Полная таблица соответствия выглядит так: + +- `const vtype_pointer` -> `pointer` +- `const char*` -> `cstring` +- `const vtype_string*` -> `string` +- `const vtype_array*` -> `array` +- `const vtype_list*` -> `list` +- `const vtype_map*` -> `map` +- `const vtype_vset*` -> `vset` +- `const vtype_dict*` -> `dict` +- `const vtype_dict*` -> `dict` +- `vtype_bool` -> `boolean` +- `vtype_uint8` -> `uint8` +- `vtype_uint16` -> `uint16` +- `vtype_uint32` -> `uint32` +- `vtype_uint64` -> `uint64` +- `vtype_int8` -> `int8` +- `vtype_int16` -> `int16` +- `vtype_int32` -> `int32` +- `vtype_int64` -> `int64` +- `vtype_float` -> `float` +- `vtype_double` -> `double` +- `vtype_ldouble` -> `ldouble` + +Тем не менее, предполагается, что они не будут использоваться напрямую, так как для каждого метода, предполагающего возможность использования с несколькими вариантами типов, предоставляется `_Generic` макрос. В случае с `libcdsb_array_push_` таковым макросом является `array_push_back`. Только подобные макросы будут рассмотрены в следующих подпунктах данного материала, при описании интерфейсов метода, так как, за исключением принимаемого типа, они не различимы, с точки зрения своего поведения. + +Префиксом `libcdsb_` помечаются те методы (и, потенциально, макросы), использование которых, в рамках пользовательского кода, требует большего внимания и глубины понимания происходящих процессов от пользователя. Так, в эту категорию, попадают практически все методы из блока *extra*. + + #### [include/vtype.h](https://gogs.lirent.ru/lirent/libcdsb/src/master/include/vtype.h) Помимо декларации типов и перечисления **vtype**, предоставляющего функционал их идентификации, в файле задекларировано 7 базовых групп методов для работы с контейнерами.