style: updated comments

This commit is contained in:
aZholtikov committed 2026-08-02 07:49:04 +03:00
1 parent f17658bcff
commit fb17cd1844
2 files changed
+149 -139

No files matched your search

+75 -70
View File
@@ -24,14 +24,14 @@
## Возможности
- **Независимость от типа данных**: Поддерживает любой тип данных (целые числа, числа с плавающей точкой, структуры, пользовательские типы и т.д.)
- **Автоматическое управление памятью**: Автоматическое выделение и освобождение памяти
- **Динамическое изменение размера**: Емкость вектора увеличивается и уменьшается по мере необходимости
- **Максимальная емкость**: До 65 535 элементов (ограничение 16-битного индекса)
- **Оптимизировано под ESP-IDF**: Использует функции heap_caps для выделения памяти с параметрами памяти
- **Обработка ошибок**: Комплексная проверка ошибок с детальным логированием
- **Потокобезопасность**: Является потокобезопасным (использует FreeRTOS mutex)
- **Минимальные накладные расходы**: Низкие накладные расходы на память и процессор
1. **Независимость от типа данных**: Поддерживает любой тип данных (целые числа, числа с плавающей точкой, структуры, пользовательские типы и т.д.)
2. **Автоматическое управление памятью**: Автоматическое выделение и освобождение памяти
3. **Динамическое изменение размера**: Емкость вектора увеличивается и уменьшается по мере необходимости
4. **Максимальная емкость**: До 65 535 элементов (ограничение 16-битного индекса)
5. **Оптимизировано под ESP-IDF**: Использует функции heap_caps для выделения памяти с параметрами памяти
6. **Обработка ошибок**: Комплексная проверка ошибок с детальным логированием
7. **Потокобезопасность**: Является потокобезопасным (использует FreeRTOS mutex)
8. **Минимальные накладные расходы**: Низкие накладные расходы на память и процессор
---
@@ -70,7 +70,7 @@ git clone https://github.com/aZholtikov/zh_vector
**Поля (внутренние):**
| Поле | Тип | Описание |
|------|-----|----------|
| ------ | ----- | ---------- |
| `items` | `void **` | Массив указателей на элементы вектора. Items[0..size-1] являются валидными. Выделяется через heap_caps_calloc, перераспределяется через heap_caps_realloc. |
| `capacity` | `uint16_t` | Текущая выделенная емкость (количество слотов). Увеличивается при вставке — может превышать size после удалений. |
| `size` | `uint16_t` | Текущее количество элементов (0 ≤ size ≤ capacity). |
@@ -85,8 +85,8 @@ git clone https://github.com/aZholtikov/zh_vector
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Если указатель на вектор равен NULL, будет выделена память.
- `unit` - Размер каждого элемента в байтах
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Должен быть NULL
- `unit` - Размер каждого элемента в байтах. Должен быть > 0
**Возвращает:**
@@ -114,7 +114,7 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
**Возвращает:**
@@ -132,8 +132,8 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `capacity` - Указатель на переменную для сохранения емкости. Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
- `capacity` - Указатель на переменную для сохранения емкости. Не должен быть NULL
**Возвращает:**
@@ -141,7 +141,7 @@ if (ret != ESP_OK) {
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL указатель на указатель на вектор или capacity)
- `ESP_ERR_INVALID_STATE` - Не удалось захватить mutex (редкий системный сбой)
**Примечание:** Емкость может быть больше текущего размера (например, после удалений), и уменьшается лениво при size < capacity/2 (или когда size становится 0).
**Примечание:** Емкость может быть больше текущего размера (например, после удалений). Уменьшение емкости происходит автоматически при удалении элементов, когда `capacity / 2 > size` (емкость больше удвоенного размера) или когда размер становится 0.
---
@@ -151,8 +151,8 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `size` - Указатель на переменную для сохранения размера. Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
- `size` - Указатель на переменную для сохранения размера. Не должен быть NULL
**Возвращает:**
@@ -168,8 +168,8 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `item` - Указатель на элемент для добавления. Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
- `item` - Указатель на элемент для добавления. Не должен быть NULL
**Возвращает:**
@@ -188,8 +188,8 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `item` - Указатель на элемент для добавления. Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
- `item` - Указатель на элемент для добавления. Не должен быть NULL
**Возвращает:**
@@ -208,9 +208,9 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `index` - Индекс элемента для изменения (начиная с 0). Должен быть < размера вектора.
- `item` - Указатель на новые данные элемента. Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
- `index` - Индекс элемента для изменения (начиная с 0). Должен быть < размера вектора
- `item` - Указатель на новые данные элемента. Не должен быть NULL
**Возвращает:**
@@ -226,9 +226,9 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `index` - Индекс элемента для получения (начиная с 0).
- `item` - Указатель на буфер размером не менее `unit` байт, куда будет скопирован элемент. Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
- `index` - Индекс элемента для получения (начиная с 0)
- `item` - Указатель на буфер размером не менее `unit` байт, куда будет скопирован элемент. Не должен быть NULL
**Возвращает:**
@@ -246,17 +246,16 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `index` - Индекс элемента для удаления (начиная с 0). Должен быть < размера вектора.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
- `index` - Индекс элемента для удаления (начиная с 0). Должен быть < размера вектора
**Возвращает:**
- `ESP_OK` - Успех
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL указатель на указатель на вектор или неверный индекс)
- `ESP_ERR_NO_MEM` - Ошибка выделения памяти (при перераспределении)
- `ESP_ERR_INVALID_STATE` - Не удалось захватить mutex (редкий системный сбой)
- `ESP_ERR_INVALID_STATE` - Не удалось захватить mutex или внутренняя ошибка
**Примечание:** Все элементы после удаляемого индекса сдвигаются влево на одну позицию. Память удаленного элемента освобождается.
**Примечание:** Все элементы после удаляемого индекса сдвигаются влево на одну позицию. Память удаленного элемента освобождается. Емкость автоматически уменьшается, когда `capacity / 2 > size` или когда размер становится 0.
---
@@ -266,7 +265,7 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
**Возвращает:**
@@ -274,7 +273,7 @@ if (ret != ESP_OK) {
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL указатель на вектор, NULL вектор или вектор пуст)
- `ESP_ERR_INVALID_STATE` - Не удалось захватить mutex (редкий системный сбой)
**Примечание:** Память удаленного элемента освобождается. Если размер падает ниже половины емкости, емкость уменьшается (такое же поведение, как в zh_vector_delete_item).
**Примечание:** Память удаленного элемента освобождается. Емкость автоматически уменьшается, когда `capacity / 2 > size` или когда размер становится 0 (такое же поведение, как в zh_vector_delete_item).
---
@@ -284,7 +283,7 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
**Возвращает:**
@@ -292,7 +291,7 @@ if (ret != ESP_OK) {
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL указатель на вектор, NULL вектор или вектор пуст)
- `ESP_ERR_INVALID_STATE` - Не удалось захватить mutex (редкий системный сбой)
**Примечание:** Память удаленного элемента освобождается, и все последующие элементы сдвигаются влево на одну позицию. Если размер падает ниже половины емкости, емкость уменьшается (такое же поведение, как в zh_vector_delete_item).
**Примечание:** Память удаленного элемента освобождается, и все последующие элементы сдвигаются влево на одну позицию. Емкость автоматически уменьшается, когда `capacity / 2 > size` или когда размер становится 0 (такое же поведение, как в zh_vector_delete_item).
---
@@ -302,9 +301,9 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `item` - Указатель на элемент для поиска. Не должен быть NULL.
- `index` - Указатель на переменную для сохранения найденного индекса. Будет установлен в -1, если элемент не найден. Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
- `item` - Указатель на элемент для поиска. Не должен быть NULL
- `index` - Указатель на переменную типа `int32_t` для сохранения найденного индекса. Будет установлен в -1, если элемент не найден. Не должен быть NULL
**Возвращает:**
@@ -323,13 +322,13 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `sample_struct` - Указатель на образец структуры того же типа, что и хранится в векторе. Не должен быть NULL.
- `item` - Указатель на поле внутри структуры (например, `&sample.id`). Используется для вычисления смещения поля внутри структуры. Не должен быть NULL.
- `size` - Размер (в байтах) поля для сравнения. Должен быть > 0.
- `value` - Указатель на значение для поиска. Не должен быть NULL.
- `start` - Начальный индекс для поиска (начиная с 0). Должен быть < размера вектора.
- `index` - Указатель на переменную для сохранения найденного индекса. Будет установлен в -1, если значение не найдено. Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
- `sample_struct` - Указатель на образец структуры того же типа, что и хранится в векторе. Не должен быть NULL
- `item` - Указатель на поле внутри структуры (например, `&sample.id`). Используется для вычисления смещения поля внутри структуры. Не должен быть NULL
- `size` - Размер (в байтах) поля для сравнения. Должен быть > 0
- `value` - Указатель на значение для поиска. Не должен быть NULL
- `start` - Начальный индекс для поиска (начиная с 0). Должен быть < размера вектора
- `index` - Указатель на переменную типа `int32_t` для сохранения найденного индекса. Будет установлен в -1, если значение не найдено. Не должен быть NULL
**Возвращает:**
@@ -348,7 +347,7 @@ if (ret != ESP_OK) {
**Параметры:**
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
**Возвращает:**
@@ -389,7 +388,7 @@ void app_main(void)
ret = zh_vector_get_size(&vector, &size);
if (ret == ESP_OK)
{
printf("Размер вектора: %zu\n", size);
printf("Размер вектора: %u\n", size);
}
// Доступ к элементам
for (int i = 0; i < size; i++)
@@ -469,19 +468,25 @@ void app_main(void)
{
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
zh_vector_t *vector = NULL;
char buffer[100] = {0};
// Инициализация вектора для строк (макс. 100 символов)
esp_err_t ret = zh_vector_init(&vector, sizeof(buffer));
esp_err_t ret = zh_vector_init(&vector, 100);
if (ret != ESP_OK)
{
printf("Ошибка инициализации вектора\n");
return;
}
// Добавление строк
strcpy(buffer, "Привет");
zh_vector_push_front(&vector, &buffer);
strcpy(buffer, "Мир");
zh_vector_push_back(&vector, &buffer);
// Добавление строк (каждая строка выделяется отдельно)
char *str1 = malloc(100);
char *str2 = malloc(100);
if (str1 && str2)
{
strcpy(str1, "Привет");
strcpy(str2, "Мир");
zh_vector_push_back(&vector, str1);
zh_vector_push_back(&vector, str2);
free(str1);
free(str2);
}
uint16_t size = 0;
ret = zh_vector_get_size(&vector, &size);
if (ret == ESP_OK)
@@ -541,14 +546,14 @@ void app_main(void)
ret = zh_vector_get_size(&vector, &size);
if (ret == ESP_OK)
{
printf("Размер вектора перед удалением дубликатов: %zu\n", size);
printf("Размер вектора перед удалением дубликатов: %u\n", size);
}
// Удаление дубликатов
zh_vector_remove_duplicates(&vector);
ret = zh_vector_get_size(&vector, &size);
if (ret == ESP_OK)
{
printf("Размер вектора после удаления дубликатов: %zu\n", size);
printf("Размер вектора после удаления дубликатов: %u\n", size);
}
// Доступ к оставшимся элементам
for (int i = 0; i < size; ++i)
@@ -600,11 +605,11 @@ void app_main(void)
ret = zh_vector_find_item(&vector, &search_item, &found_index);
if (ret == ESP_OK)
{
printf("Элемент %d найден по индексу %ld\n", search_item, found_index);
printf("Элемент %d найден по индексу %d\n", search_item, (int)found_index);
}
else
{
printf("Элемент %d не найден (index=%ld)\n", search_item, found_index);
printf("Элемент %d не найден (index=%d)\n", search_item, (int)found_index);
}
// Поиск несуществующего элемента
search_item = 100;
@@ -612,11 +617,11 @@ void app_main(void)
ret = zh_vector_find_item(&vector, &search_item, &found_index);
if (ret == ESP_OK)
{
printf("Элемент %d найден по индексу %ld\n", search_item, found_index);
printf("Элемент %d найден по индексу %d\n", search_item, (int)found_index);
}
else
{
printf("Элемент %d не найден (index=%ld)\n", search_item, found_index);
printf("Элемент %d не найден (index=%d)\n", search_item, (int)found_index);
}
// Очистка
zh_vector_free(&vector);
@@ -663,7 +668,7 @@ void app_main(void)
ret = zh_vector_find_item_in_field(&vector, &sample, &sample.id, sizeof(sample.id), &search_id, 0, &found_index);
if (ret == ESP_OK)
{
printf("Структура с id=%d найдена по индексу %ld\n", search_id, found_index);
printf("Структура с id=%d найдена по индексу %d\n", search_id, (int)found_index);
// Получение найденной структуры
my_struct_t found_item = {0};
ret = zh_vector_get_item(&vector, (uint16_t)found_index, &found_item);
@@ -674,7 +679,7 @@ void app_main(void)
}
else
{
printf("Структура с id=%d не найдена (index=%ld)\n", search_id, found_index);
printf("Структура с id=%d не найдена (index=%d)\n", search_id, (int)found_index);
}
// Поиск несуществующего id
search_id = 100;
@@ -682,11 +687,11 @@ void app_main(void)
ret = zh_vector_find_item_in_field(&vector, &sample, &sample.id, sizeof(sample.id), &search_id, 0, &found_index);
if (ret == ESP_OK)
{
printf("Структура с id=%d найдена по индексу %ld\n", search_id, found_index);
printf("Структура с id=%d найдена по индексу %d\n", search_id, (int)found_index);
}
else
{
printf("Структура с id=%d не найдена (index=%ld)\n", search_id, found_index);
printf("Структура с id=%d не найдена (index=%d)\n", search_id, (int)found_index);
}
// Очистка
zh_vector_free(&vector);
@@ -698,7 +703,7 @@ void app_main(void)
## Технические характеристики
| Параметр | Значение |
|----------|----------|
| ---------- | ---------- |
| **Максимальная емкость** | 65 535 элементов |
| **Тип индекса** | uint16_t (16-бит) |
| **Управление памятью** | heap_caps_calloc, heap_caps_realloc, heap_caps_free |
@@ -713,12 +718,12 @@ void app_main(void)
## Коды ошибок
| Код ошибки | Описание |
|------------|----------|
| ------------ | ---------- |
| `ESP_OK` | Операция выполнена успешно |
| `ESP_ERR_INVALID_ARG` | Неверный аргумент (NULL указатель или нулевой размер) |
| `ESP_ERR_INVALID_STATE` | Не удалось захватить mutex (редкий системный сбой) |
| `ESP_ERR_INVALID_ARG` | Неверный аргумент (NULL указатель, нулевой размер или неверный индекс) |
| `ESP_ERR_INVALID_STATE` | Не удалось захватить mutex или внутренняя ошибка (например, элемент равен NULL) |
| `ESP_ERR_NO_MEM` | Ошибка выделения памяти (не хватает памяти) |
| `ESP_ERR_NOT_FOUND` | Элемент не найден (для zh_vector_find_item) |
| `ESP_ERR_NOT_FOUND` | Элемент не найден (для zh_vector_find_item и zh_vector_find_item_in_field) |
---