From c5ccf9e7a29263a84bbddddffe31b18b85a5b269 Mon Sep 17 00:00:00 2001 From: Gregory Lirent Date: Wed, 17 Aug 2022 13:56:53 +0300 Subject: [PATCH] =?UTF-8?q?Update=20page=20'2.=20=D0=97=D0=B0=D0=B3=D0=BE?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=D0=BE=D1=87=D0=BD=D1=8B=D0=B5=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D1=8B'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2. Заголовочные файлы.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) 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 базовых групп методов для работы с контейнерами.