Update page '2. Заголовочные файлы'
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 базовых групп методов для работы с контейнерами.
|
||||||
|
Loading…
Reference in New Issue
Block a user