Update page '2. Заголовочные файлы'

Gregory Lirent 2022-08-17 13:56:53 +03:00
parent 934c4a808c
commit c5ccf9e7a2

@ -28,6 +28,42 @@
Где первые два предоставляют доступ к внутренним реализациям работы с памятью для пользовательского кода (в том числе повторяя или являясь оберткой над функционалом стандартной библиотеки), а последний - предоставляет методы для генерации C-строк (с основанием на значении **vtype**). Где первые два предоставляют доступ к внутренним реализациям работы с памятью для пользовательского кода (в том числе повторяя или являясь оберткой над функционалом стандартной библиотеки), а последний - предоставляет методы для генерации 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) #### [include/vtype.h](https://gogs.lirent.ru/lirent/libcdsb/src/master/include/vtype.h)
Помимо декларации типов и перечисления **vtype**, предоставляющего функционал их идентификации, в файле задекларировано 7 базовых групп методов для работы с контейнерами. Помимо декларации типов и перечисления **vtype**, предоставляющего функционал их идентификации, в файле задекларировано 7 базовых групп методов для работы с контейнерами.