style: updated comments
This commit is contained in:
1 parent
f17658bcff
commit
fb17cd1844
2 files changed
+143
-133
No files matched your search
+71
-66
@@ -24,14 +24,14 @@ The component is designed specifically for ESP32 microcontrollers and uses ESP-I
|
|||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Type Agnostic**: Supports any data type (integers, floats, structs, custom types, etc.)
|
1. **Type Agnostic**: Supports any data type (integers, floats, structs, custom types, etc.)
|
||||||
- **Automatic Memory Management**: Automatic memory allocation and deallocation
|
2. **Automatic Memory Management**: Automatic memory allocation and deallocation
|
||||||
- **Dynamic Resizing**: Vector capacity grows and shrinks as needed
|
3. **Dynamic Resizing**: Vector capacity grows and shrinks as needed
|
||||||
- **Maximum Capacity**: Up to 65,535 elements (16-bit index limit)
|
4. **Maximum Capacity**: Up to 65,535 elements (16-bit index limit)
|
||||||
- **ESP-IDF Optimized**: Uses heap_caps functions for memory allocation with memory caps
|
5. **ESP-IDF Optimized**: Uses heap_caps functions for memory allocation with memory caps
|
||||||
- **Error Handling**: Comprehensive error checking with detailed logging
|
6. **Error Handling**: Comprehensive error checking with detailed logging
|
||||||
- **Thread-Safe**: Thread-safe (uses FreeRTOS mutex)
|
7. **Thread-Safe**: Thread-safe (uses FreeRTOS mutex)
|
||||||
- **Minimal Overhead**: Low memory and CPU overhead
|
8. **Minimal Overhead**: Low memory and CPU overhead
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -85,8 +85,8 @@ Initializes the vector.
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). If the vector pointer is NULL, memory will be allocated.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must point to NULL for creating a new vector. Must be NULL
|
||||||
- `unit` - Size of each element in bytes
|
- `unit` - Size of each element in bytes. Must be > 0
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ Deinitializes the vector and frees all allocated memory. Sets the vector pointer
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -132,8 +132,8 @@ Gets the current allocated capacity of the vector (maximum number of elements wi
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
- `capacity` - Pointer to variable to store the capacity. Must not be NULL.
|
- `capacity` - Pointer to variable to store the capacity. Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ Gets the current allocated capacity of the vector (maximum number of elements wi
|
|||||||
- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL vector pointer or capacity pointer)
|
- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL vector pointer or capacity pointer)
|
||||||
- `ESP_ERR_INVALID_STATE` - Failed to acquire mutex (rare system error)
|
- `ESP_ERR_INVALID_STATE` - Failed to acquire mutex (rare system error)
|
||||||
|
|
||||||
**Note:** Capacity may be larger than the current size (e.g., after deletions), and is reduced lazily when size < capacity/2 (or when size becomes 0).
|
**Note:** Capacity may be larger than the current size (e.g., after deletions). Capacity reduction occurs automatically when `capacity / 2 > size` or when size becomes 0.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -151,8 +151,8 @@ Gets the current number of elements in the vector.
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
- `size` - Pointer to variable to store the size. Must not be NULL.
|
- `size` - Pointer to variable to store the size. Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -168,8 +168,8 @@ Adds an element to the beginning of the vector.
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
- `item` - Pointer to the element to add. Must not be NULL.
|
- `item` - Pointer to the element to add. Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -188,8 +188,8 @@ Adds an element to the end of the vector.
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
- `item` - Pointer to the element to add. Must not be NULL.
|
- `item` - Pointer to the element to add. Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -208,9 +208,9 @@ Changes an element at a specific index.
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
- `index` - Index of the element to change (0-based). Must be < vector size.
|
- `index` - Index of the element to change (0-based). Must be < vector size.
|
||||||
- `item` - Pointer to the new element data. Must not be NULL.
|
- `item` - Pointer to the new element data. Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -226,9 +226,9 @@ Retrieves an element at a specific index by copying it into the user-provided bu
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
- `index` - Index of the element to get (0-based).
|
- `index` - Index of the element to get (0-based)
|
||||||
- `item` - Pointer to a buffer of at least `unit` bytes where the element will be copied. Must not be NULL.
|
- `item` - Pointer to a buffer of at least `unit` bytes where the element will be copied. Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -246,17 +246,16 @@ Deletes an element at a specific index and shifts all subsequent elements.
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
- `index` - Index of the element to delete (0-based). Must be < vector size.
|
- `index` - Index of the element to delete (0-based). Must be < vector size
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
- `ESP_OK` - Success
|
- `ESP_OK` - Success
|
||||||
- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL vector pointer or invalid index)
|
- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL vector pointer or invalid index)
|
||||||
- `ESP_ERR_NO_MEM` - Memory allocation failed (during reallocation)
|
- `ESP_ERR_INVALID_STATE` - Failed to acquire mutex or internal error
|
||||||
- `ESP_ERR_INVALID_STATE` - Failed to acquire mutex (rare system error)
|
|
||||||
|
|
||||||
**Note:** All elements after the deleted index are shifted left by one position. The deleted item's memory is freed.
|
**Note:** All elements after the deleted index are shifted left by one position. The deleted item's memory is freed. Capacity is automatically reduced when `capacity / 2 > size` or when size becomes 0.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -266,7 +265,7 @@ Removes the last element from the vector.
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -274,7 +273,7 @@ Removes the last element from the vector.
|
|||||||
- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL vector pointer, NULL vector, or vector is empty)
|
- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL vector pointer, NULL vector, or vector is empty)
|
||||||
- `ESP_ERR_INVALID_STATE` - Failed to acquire mutex (rare system error)
|
- `ESP_ERR_INVALID_STATE` - Failed to acquire mutex (rare system error)
|
||||||
|
|
||||||
**Note:** The deleted item's memory is freed. If the size drops below half of the capacity, the capacity is reduced (same behaviour as zh_vector_delete_item).
|
**Note:** The deleted item's memory is freed. Capacity is automatically reduced when `capacity / 2 > size` or when size becomes 0 (same behaviour as zh_vector_delete_item).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -284,7 +283,7 @@ Removes the first element from the vector.
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -292,7 +291,7 @@ Removes the first element from the vector.
|
|||||||
- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL vector pointer, NULL vector, or vector is empty)
|
- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL vector pointer, NULL vector, or vector is empty)
|
||||||
- `ESP_ERR_INVALID_STATE` - Failed to acquire mutex (rare system error)
|
- `ESP_ERR_INVALID_STATE` - Failed to acquire mutex (rare system error)
|
||||||
|
|
||||||
**Note:** The deleted item's memory is freed, and all subsequent elements are shifted left by one position. If the size drops below half of the capacity, the capacity is reduced (same behaviour as zh_vector_delete_item).
|
**Note:** The deleted item's memory is freed, and all subsequent elements are shifted left by one position. Capacity is automatically reduced when `capacity / 2 > size` or when size becomes 0 (same behaviour as zh_vector_delete_item).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -302,9 +301,9 @@ Finds the first occurrence of an element in the vector.
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
- `item` - Pointer to the element to find. Must not be NULL.
|
- `item` - Pointer to the element to find. Must not be NULL
|
||||||
- `index` - Pointer to variable to store the found index. Will be set to -1 if element is not found. Must not be NULL.
|
- `index` - Pointer to variable of type `int32_t` to store the found index. Will be set to -1 if element is not found. Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -323,13 +322,13 @@ Finds the first occurrence of a value in a specific field within structures stor
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
- `sample_struct` - Pointer to a sample structure of the same type as stored in the vector. Must not be NULL.
|
- `sample_struct` - Pointer to a sample structure of the same type as stored in the vector. Must not be NULL
|
||||||
- `item` - Pointer to the field within the structure (e.g., `&sample.id`). Used to calculate the field offset within the structure. Must not be NULL.
|
- `item` - Pointer to the field within the structure (e.g., `&sample.id`). Used to calculate the field offset within the structure. Must not be NULL
|
||||||
- `size` - Size (in bytes) of the field to compare. Must be > 0.
|
- `size` - Size (in bytes) of the field to compare. Must be > 0
|
||||||
- `value` - Pointer to the value to search for. Must not be NULL.
|
- `value` - Pointer to the value to search for. Must not be NULL
|
||||||
- `start` - Starting index for the search (0-based). Must be < vector size.
|
- `start` - Starting index for the search (0-based). Must be < vector size
|
||||||
- `index` - Pointer to variable to store the found index. Will be set to -1 if value is not found. Must not be NULL.
|
- `index` - Pointer to variable of type `int32_t` to store the found index. Will be set to -1 if value is not found. Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -348,7 +347,7 @@ Removes duplicate elements from the vector, keeping only the first occurrence of
|
|||||||
|
|
||||||
**Parameters:**
|
**Parameters:**
|
||||||
|
|
||||||
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL.
|
- `vector` - Pointer to pointer to vector structure (`zh_vector_t **`). Must not be NULL
|
||||||
|
|
||||||
**Returns:**
|
**Returns:**
|
||||||
|
|
||||||
@@ -389,7 +388,7 @@ void app_main(void)
|
|||||||
ret = zh_vector_get_size(&vector, &size);
|
ret = zh_vector_get_size(&vector, &size);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Vector size: %zu\n", size);
|
printf("Vector size: %u\n", size);
|
||||||
}
|
}
|
||||||
// Access elements
|
// Access elements
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
@@ -469,19 +468,25 @@ void app_main(void)
|
|||||||
{
|
{
|
||||||
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
|
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
|
||||||
zh_vector_t *vector = NULL;
|
zh_vector_t *vector = NULL;
|
||||||
char buffer[100] = {0};
|
|
||||||
// Initialize vector for strings (100 char max)
|
// Initialize vector for strings (100 char max)
|
||||||
esp_err_t ret = zh_vector_init(&vector, sizeof(buffer));
|
esp_err_t ret = zh_vector_init(&vector, 100);
|
||||||
if (ret != ESP_OK)
|
if (ret != ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Vector initialization error\n");
|
printf("Vector initialization error\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Add strings
|
// Add strings (each string allocated separately)
|
||||||
strcpy(buffer, "Hello");
|
char *str1 = malloc(100);
|
||||||
zh_vector_push_front(&vector, &buffer);
|
char *str2 = malloc(100);
|
||||||
strcpy(buffer, "World");
|
if (str1 && str2)
|
||||||
zh_vector_push_back(&vector, &buffer);
|
{
|
||||||
|
strcpy(str1, "Hello");
|
||||||
|
strcpy(str2, "World");
|
||||||
|
zh_vector_push_back(&vector, str1);
|
||||||
|
zh_vector_push_back(&vector, str2);
|
||||||
|
free(str1);
|
||||||
|
free(str2);
|
||||||
|
}
|
||||||
uint16_t size = 0;
|
uint16_t size = 0;
|
||||||
ret = zh_vector_get_size(&vector, &size);
|
ret = zh_vector_get_size(&vector, &size);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
@@ -541,14 +546,14 @@ void app_main(void)
|
|||||||
ret = zh_vector_get_size(&vector, &size);
|
ret = zh_vector_get_size(&vector, &size);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Vector size before removing duplicates: %zu\n", size);
|
printf("Vector size before removing duplicates: %u\n", size);
|
||||||
}
|
}
|
||||||
// Remove duplicates
|
// Remove duplicates
|
||||||
zh_vector_remove_duplicates(&vector);
|
zh_vector_remove_duplicates(&vector);
|
||||||
ret = zh_vector_get_size(&vector, &size);
|
ret = zh_vector_get_size(&vector, &size);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Vector size after removing duplicates: %zu\n", size);
|
printf("Vector size after removing duplicates: %u\n", size);
|
||||||
}
|
}
|
||||||
// Access remaining elements
|
// Access remaining elements
|
||||||
for (int i = 0; i < size; ++i)
|
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);
|
ret = zh_vector_find_item(&vector, &search_item, &found_index);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Element %d found at index %ld\n", search_item, found_index);
|
printf("Element %d found at index %d\n", search_item, (int)found_index);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Element %d not found (index=%ld)\n", search_item, found_index);
|
printf("Element %d not found (index=%d)\n", search_item, (int)found_index);
|
||||||
}
|
}
|
||||||
// Find non-existing element
|
// Find non-existing element
|
||||||
search_item = 100;
|
search_item = 100;
|
||||||
@@ -612,11 +617,11 @@ void app_main(void)
|
|||||||
ret = zh_vector_find_item(&vector, &search_item, &found_index);
|
ret = zh_vector_find_item(&vector, &search_item, &found_index);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Element %d found at index %ld\n", search_item, found_index);
|
printf("Element %d found at index %d\n", search_item, (int)found_index);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Element %d not found (index=%ld)\n", search_item, found_index);
|
printf("Element %d not found (index=%d)\n", search_item, (int)found_index);
|
||||||
}
|
}
|
||||||
// Cleanup
|
// Cleanup
|
||||||
zh_vector_free(&vector);
|
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);
|
ret = zh_vector_find_item_in_field(&vector, &sample, &sample.id, sizeof(sample.id), &search_id, 0, &found_index);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Struct with id=%d found at index %ld\n", search_id, found_index);
|
printf("Struct with id=%d found at index %d\n", search_id, (int)found_index);
|
||||||
// Get the found struct
|
// Get the found struct
|
||||||
my_struct_t found_item = {0};
|
my_struct_t found_item = {0};
|
||||||
ret = zh_vector_get_item(&vector, (uint16_t)found_index, &found_item);
|
ret = zh_vector_get_item(&vector, (uint16_t)found_index, &found_item);
|
||||||
@@ -674,7 +679,7 @@ void app_main(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Struct with id=%d not found (index=%ld)\n", search_id, found_index);
|
printf("Struct with id=%d not found (index=%d)\n", search_id, (int)found_index);
|
||||||
}
|
}
|
||||||
// Find non-existing id
|
// Find non-existing id
|
||||||
search_id = 100;
|
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);
|
ret = zh_vector_find_item_in_field(&vector, &sample, &sample.id, sizeof(sample.id), &search_id, 0, &found_index);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Struct with id=%d found at index %ld\n", search_id, found_index);
|
printf("Struct with id=%d found at index %d\n", search_id, (int)found_index);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Struct with id=%d not found (index=%ld)\n", search_id, found_index);
|
printf("Struct with id=%d not found (index=%d)\n", search_id, (int)found_index);
|
||||||
}
|
}
|
||||||
// Cleanup
|
// Cleanup
|
||||||
zh_vector_free(&vector);
|
zh_vector_free(&vector);
|
||||||
@@ -715,10 +720,10 @@ void app_main(void)
|
|||||||
| Error Code | Description |
|
| Error Code | Description |
|
||||||
| ------------ | ------------- |
|
| ------------ | ------------- |
|
||||||
| `ESP_OK` | Operation successful |
|
| `ESP_OK` | Operation successful |
|
||||||
| `ESP_ERR_INVALID_ARG` | Invalid argument (NULL pointer or zero size) |
|
| `ESP_ERR_INVALID_ARG` | Invalid argument (NULL pointer, zero size, or invalid index) |
|
||||||
| `ESP_ERR_INVALID_STATE` | Failed to acquire mutex (rare system error) |
|
| `ESP_ERR_INVALID_STATE` | Failed to acquire mutex or internal error (e.g., item is NULL) |
|
||||||
| `ESP_ERR_NO_MEM` | Memory allocation failed (out of memory) |
|
| `ESP_ERR_NO_MEM` | Memory allocation failed (out of memory) |
|
||||||
| `ESP_ERR_NOT_FOUND` | Element not found (for zh_vector_find_item) |
|
| `ESP_ERR_NOT_FOUND` | Element not found (for zh_vector_find_item and zh_vector_find_item_in_field) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+72
-67
@@ -24,14 +24,14 @@
|
|||||||
|
|
||||||
## Возможности
|
## Возможности
|
||||||
|
|
||||||
- **Независимость от типа данных**: Поддерживает любой тип данных (целые числа, числа с плавающей точкой, структуры, пользовательские типы и т.д.)
|
1. **Независимость от типа данных**: Поддерживает любой тип данных (целые числа, числа с плавающей точкой, структуры, пользовательские типы и т.д.)
|
||||||
- **Автоматическое управление памятью**: Автоматическое выделение и освобождение памяти
|
2. **Автоматическое управление памятью**: Автоматическое выделение и освобождение памяти
|
||||||
- **Динамическое изменение размера**: Емкость вектора увеличивается и уменьшается по мере необходимости
|
3. **Динамическое изменение размера**: Емкость вектора увеличивается и уменьшается по мере необходимости
|
||||||
- **Максимальная емкость**: До 65 535 элементов (ограничение 16-битного индекса)
|
4. **Максимальная емкость**: До 65 535 элементов (ограничение 16-битного индекса)
|
||||||
- **Оптимизировано под ESP-IDF**: Использует функции heap_caps для выделения памяти с параметрами памяти
|
5. **Оптимизировано под ESP-IDF**: Использует функции heap_caps для выделения памяти с параметрами памяти
|
||||||
- **Обработка ошибок**: Комплексная проверка ошибок с детальным логированием
|
6. **Обработка ошибок**: Комплексная проверка ошибок с детальным логированием
|
||||||
- **Потокобезопасность**: Является потокобезопасным (использует FreeRTOS mutex)
|
7. **Потокобезопасность**: Является потокобезопасным (использует FreeRTOS mutex)
|
||||||
- **Минимальные накладные расходы**: Низкие накладные расходы на память и процессор
|
8. **Минимальные накладные расходы**: Низкие накладные расходы на память и процессор
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -85,8 +85,8 @@ git clone https://github.com/aZholtikov/zh_vector
|
|||||||
|
|
||||||
**Параметры:**
|
**Параметры:**
|
||||||
|
|
||||||
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Если указатель на вектор равен NULL, будет выделена память.
|
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Должен быть NULL
|
||||||
- `unit` - Размер каждого элемента в байтах
|
- `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.
|
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
|
||||||
- `capacity` - Указатель на переменную для сохранения емкости. Не должен быть NULL.
|
- `capacity` - Указатель на переменную для сохранения емкости. Не должен быть NULL
|
||||||
|
|
||||||
**Возвращает:**
|
**Возвращает:**
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ if (ret != ESP_OK) {
|
|||||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL указатель на указатель на вектор или capacity)
|
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL указатель на указатель на вектор или capacity)
|
||||||
- `ESP_ERR_INVALID_STATE` - Не удалось захватить mutex (редкий системный сбой)
|
- `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.
|
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
|
||||||
- `size` - Указатель на переменную для сохранения размера. Не должен быть NULL.
|
- `size` - Указатель на переменную для сохранения размера. Не должен быть NULL
|
||||||
|
|
||||||
**Возвращает:**
|
**Возвращает:**
|
||||||
|
|
||||||
@@ -168,8 +168,8 @@ if (ret != ESP_OK) {
|
|||||||
|
|
||||||
**Параметры:**
|
**Параметры:**
|
||||||
|
|
||||||
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
|
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
|
||||||
- `item` - Указатель на элемент для добавления. Не должен быть NULL.
|
- `item` - Указатель на элемент для добавления. Не должен быть NULL
|
||||||
|
|
||||||
**Возвращает:**
|
**Возвращает:**
|
||||||
|
|
||||||
@@ -188,8 +188,8 @@ if (ret != ESP_OK) {
|
|||||||
|
|
||||||
**Параметры:**
|
**Параметры:**
|
||||||
|
|
||||||
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
|
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
|
||||||
- `item` - Указатель на элемент для добавления. Не должен быть NULL.
|
- `item` - Указатель на элемент для добавления. Не должен быть NULL
|
||||||
|
|
||||||
**Возвращает:**
|
**Возвращает:**
|
||||||
|
|
||||||
@@ -208,9 +208,9 @@ if (ret != ESP_OK) {
|
|||||||
|
|
||||||
**Параметры:**
|
**Параметры:**
|
||||||
|
|
||||||
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
|
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
|
||||||
- `index` - Индекс элемента для изменения (начиная с 0). Должен быть < размера вектора.
|
- `index` - Индекс элемента для изменения (начиная с 0). Должен быть < размера вектора
|
||||||
- `item` - Указатель на новые данные элемента. Не должен быть NULL.
|
- `item` - Указатель на новые данные элемента. Не должен быть NULL
|
||||||
|
|
||||||
**Возвращает:**
|
**Возвращает:**
|
||||||
|
|
||||||
@@ -226,9 +226,9 @@ if (ret != ESP_OK) {
|
|||||||
|
|
||||||
**Параметры:**
|
**Параметры:**
|
||||||
|
|
||||||
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
|
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
|
||||||
- `index` - Индекс элемента для получения (начиная с 0).
|
- `index` - Индекс элемента для получения (начиная с 0)
|
||||||
- `item` - Указатель на буфер размером не менее `unit` байт, куда будет скопирован элемент. Не должен быть NULL.
|
- `item` - Указатель на буфер размером не менее `unit` байт, куда будет скопирован элемент. Не должен быть NULL
|
||||||
|
|
||||||
**Возвращает:**
|
**Возвращает:**
|
||||||
|
|
||||||
@@ -246,17 +246,16 @@ if (ret != ESP_OK) {
|
|||||||
|
|
||||||
**Параметры:**
|
**Параметры:**
|
||||||
|
|
||||||
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
|
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
|
||||||
- `index` - Индекс элемента для удаления (начиная с 0). Должен быть < размера вектора.
|
- `index` - Индекс элемента для удаления (начиная с 0). Должен быть < размера вектора
|
||||||
|
|
||||||
**Возвращает:**
|
**Возвращает:**
|
||||||
|
|
||||||
- `ESP_OK` - Успех
|
- `ESP_OK` - Успех
|
||||||
- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL указатель на указатель на вектор или неверный индекс)
|
- `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_ARG` - Неверный аргумент (NULL указатель на вектор, NULL вектор или вектор пуст)
|
||||||
- `ESP_ERR_INVALID_STATE` - Не удалось захватить mutex (редкий системный сбой)
|
- `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_ARG` - Неверный аргумент (NULL указатель на вектор, NULL вектор или вектор пуст)
|
||||||
- `ESP_ERR_INVALID_STATE` - Не удалось захватить mutex (редкий системный сбой)
|
- `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.
|
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
|
||||||
- `item` - Указатель на элемент для поиска. Не должен быть NULL.
|
- `item` - Указатель на элемент для поиска. Не должен быть NULL
|
||||||
- `index` - Указатель на переменную для сохранения найденного индекса. Будет установлен в -1, если элемент не найден. Не должен быть NULL.
|
- `index` - Указатель на переменную типа `int32_t` для сохранения найденного индекса. Будет установлен в -1, если элемент не найден. Не должен быть NULL
|
||||||
|
|
||||||
**Возвращает:**
|
**Возвращает:**
|
||||||
|
|
||||||
@@ -323,13 +322,13 @@ if (ret != ESP_OK) {
|
|||||||
|
|
||||||
**Параметры:**
|
**Параметры:**
|
||||||
|
|
||||||
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL.
|
- `vector` - Указатель на указатель на структуру вектора (`zh_vector_t **`). Не должен быть NULL
|
||||||
- `sample_struct` - Указатель на образец структуры того же типа, что и хранится в векторе. Не должен быть NULL.
|
- `sample_struct` - Указатель на образец структуры того же типа, что и хранится в векторе. Не должен быть NULL
|
||||||
- `item` - Указатель на поле внутри структуры (например, `&sample.id`). Используется для вычисления смещения поля внутри структуры. Не должен быть NULL.
|
- `item` - Указатель на поле внутри структуры (например, `&sample.id`). Используется для вычисления смещения поля внутри структуры. Не должен быть NULL
|
||||||
- `size` - Размер (в байтах) поля для сравнения. Должен быть > 0.
|
- `size` - Размер (в байтах) поля для сравнения. Должен быть > 0
|
||||||
- `value` - Указатель на значение для поиска. Не должен быть NULL.
|
- `value` - Указатель на значение для поиска. Не должен быть NULL
|
||||||
- `start` - Начальный индекс для поиска (начиная с 0). Должен быть < размера вектора.
|
- `start` - Начальный индекс для поиска (начиная с 0). Должен быть < размера вектора
|
||||||
- `index` - Указатель на переменную для сохранения найденного индекса. Будет установлен в -1, если значение не найдено. Не должен быть NULL.
|
- `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);
|
ret = zh_vector_get_size(&vector, &size);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Размер вектора: %zu\n", size);
|
printf("Размер вектора: %u\n", size);
|
||||||
}
|
}
|
||||||
// Доступ к элементам
|
// Доступ к элементам
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
@@ -469,19 +468,25 @@ void app_main(void)
|
|||||||
{
|
{
|
||||||
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
|
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
|
||||||
zh_vector_t *vector = NULL;
|
zh_vector_t *vector = NULL;
|
||||||
char buffer[100] = {0};
|
|
||||||
// Инициализация вектора для строк (макс. 100 символов)
|
// Инициализация вектора для строк (макс. 100 символов)
|
||||||
esp_err_t ret = zh_vector_init(&vector, sizeof(buffer));
|
esp_err_t ret = zh_vector_init(&vector, 100);
|
||||||
if (ret != ESP_OK)
|
if (ret != ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Ошибка инициализации вектора\n");
|
printf("Ошибка инициализации вектора\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Добавление строк
|
// Добавление строк (каждая строка выделяется отдельно)
|
||||||
strcpy(buffer, "Привет");
|
char *str1 = malloc(100);
|
||||||
zh_vector_push_front(&vector, &buffer);
|
char *str2 = malloc(100);
|
||||||
strcpy(buffer, "Мир");
|
if (str1 && str2)
|
||||||
zh_vector_push_back(&vector, &buffer);
|
{
|
||||||
|
strcpy(str1, "Привет");
|
||||||
|
strcpy(str2, "Мир");
|
||||||
|
zh_vector_push_back(&vector, str1);
|
||||||
|
zh_vector_push_back(&vector, str2);
|
||||||
|
free(str1);
|
||||||
|
free(str2);
|
||||||
|
}
|
||||||
uint16_t size = 0;
|
uint16_t size = 0;
|
||||||
ret = zh_vector_get_size(&vector, &size);
|
ret = zh_vector_get_size(&vector, &size);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
@@ -541,14 +546,14 @@ void app_main(void)
|
|||||||
ret = zh_vector_get_size(&vector, &size);
|
ret = zh_vector_get_size(&vector, &size);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Размер вектора перед удалением дубликатов: %zu\n", size);
|
printf("Размер вектора перед удалением дубликатов: %u\n", size);
|
||||||
}
|
}
|
||||||
// Удаление дубликатов
|
// Удаление дубликатов
|
||||||
zh_vector_remove_duplicates(&vector);
|
zh_vector_remove_duplicates(&vector);
|
||||||
ret = zh_vector_get_size(&vector, &size);
|
ret = zh_vector_get_size(&vector, &size);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Размер вектора после удаления дубликатов: %zu\n", size);
|
printf("Размер вектора после удаления дубликатов: %u\n", size);
|
||||||
}
|
}
|
||||||
// Доступ к оставшимся элементам
|
// Доступ к оставшимся элементам
|
||||||
for (int i = 0; i < size; ++i)
|
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);
|
ret = zh_vector_find_item(&vector, &search_item, &found_index);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Элемент %d найден по индексу %ld\n", search_item, found_index);
|
printf("Элемент %d найден по индексу %d\n", search_item, (int)found_index);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Элемент %d не найден (index=%ld)\n", search_item, found_index);
|
printf("Элемент %d не найден (index=%d)\n", search_item, (int)found_index);
|
||||||
}
|
}
|
||||||
// Поиск несуществующего элемента
|
// Поиск несуществующего элемента
|
||||||
search_item = 100;
|
search_item = 100;
|
||||||
@@ -612,11 +617,11 @@ void app_main(void)
|
|||||||
ret = zh_vector_find_item(&vector, &search_item, &found_index);
|
ret = zh_vector_find_item(&vector, &search_item, &found_index);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Элемент %d найден по индексу %ld\n", search_item, found_index);
|
printf("Элемент %d найден по индексу %d\n", search_item, (int)found_index);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Элемент %d не найден (index=%ld)\n", search_item, found_index);
|
printf("Элемент %d не найден (index=%d)\n", search_item, (int)found_index);
|
||||||
}
|
}
|
||||||
// Очистка
|
// Очистка
|
||||||
zh_vector_free(&vector);
|
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);
|
ret = zh_vector_find_item_in_field(&vector, &sample, &sample.id, sizeof(sample.id), &search_id, 0, &found_index);
|
||||||
if (ret == ESP_OK)
|
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};
|
my_struct_t found_item = {0};
|
||||||
ret = zh_vector_get_item(&vector, (uint16_t)found_index, &found_item);
|
ret = zh_vector_get_item(&vector, (uint16_t)found_index, &found_item);
|
||||||
@@ -674,7 +679,7 @@ void app_main(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Структура с id=%d не найдена (index=%ld)\n", search_id, found_index);
|
printf("Структура с id=%d не найдена (index=%d)\n", search_id, (int)found_index);
|
||||||
}
|
}
|
||||||
// Поиск несуществующего id
|
// Поиск несуществующего id
|
||||||
search_id = 100;
|
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);
|
ret = zh_vector_find_item_in_field(&vector, &sample, &sample.id, sizeof(sample.id), &search_id, 0, &found_index);
|
||||||
if (ret == ESP_OK)
|
if (ret == ESP_OK)
|
||||||
{
|
{
|
||||||
printf("Структура с id=%d найдена по индексу %ld\n", search_id, found_index);
|
printf("Структура с id=%d найдена по индексу %d\n", search_id, (int)found_index);
|
||||||
}
|
}
|
||||||
else
|
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);
|
zh_vector_free(&vector);
|
||||||
@@ -715,10 +720,10 @@ void app_main(void)
|
|||||||
| Код ошибки | Описание |
|
| Код ошибки | Описание |
|
||||||
| ------------ | ---------- |
|
| ------------ | ---------- |
|
||||||
| `ESP_OK` | Операция выполнена успешно |
|
| `ESP_OK` | Операция выполнена успешно |
|
||||||
| `ESP_ERR_INVALID_ARG` | Неверный аргумент (NULL указатель или нулевой размер) |
|
| `ESP_ERR_INVALID_ARG` | Неверный аргумент (NULL указатель, нулевой размер или неверный индекс) |
|
||||||
| `ESP_ERR_INVALID_STATE` | Не удалось захватить mutex (редкий системный сбой) |
|
| `ESP_ERR_INVALID_STATE` | Не удалось захватить mutex или внутренняя ошибка (например, элемент равен NULL) |
|
||||||
| `ESP_ERR_NO_MEM` | Ошибка выделения памяти (не хватает памяти) |
|
| `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) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user