doc: updated readme
This commit is contained in:
1 parent
fb17cd1844
commit
865acc77a2
4 files changed
+310
-1567
No files matched your search
@@ -1,13 +1,5 @@
|
||||
# ESP32 ESP-IDF component for vector (dynamic array)
|
||||
|
||||
## Wiki
|
||||
|
||||
[EN](WIKI_EN.md) | [RU](WIKI_RU.md)
|
||||
|
||||
## Tested on
|
||||
|
||||
1. [ESP32 ESP-IDF v6.0.0](https://docs.espressif.com/projects/esp-idf/en/v6.0/esp32/index.html)
|
||||
|
||||
## SAST Tools
|
||||
|
||||
[PVS-Studio](https://pvs-studio.com/pvs-studio/?utm_source=website&utm_medium=github&utm_campaign=open_source) - static analyzer for C, C++, C#, and Java code.
|
||||
@@ -26,7 +18,7 @@
|
||||
|
||||
In an existing project, run the following command to install the component:
|
||||
|
||||
```text
|
||||
```bash
|
||||
cd ../your_project/components
|
||||
git clone https://github.com/aZholtikov/zh_vector
|
||||
```
|
||||
@@ -39,4 +31,307 @@ In the application, add the component:
|
||||
|
||||
## Examples
|
||||
|
||||
See Wiki [EN](WIKI_EN.md#usage-examples) | [RU](WIKI_RU.md#примеры-использования)
|
||||
### Basic Example: Integer Vector
|
||||
|
||||
```c
|
||||
#include "zh_vector.h"
|
||||
|
||||
zh_vector_t *vector = NULL;
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
|
||||
esp_err_t ret = zh_vector_init(&vector, sizeof(int));
|
||||
if (ret != ESP_OK)
|
||||
{
|
||||
printf("Vector initialization error\n");
|
||||
return;
|
||||
}
|
||||
int val1 = 10;
|
||||
int val2 = 20;
|
||||
int val3 = 30;
|
||||
zh_vector_push_front(&vector, &val1);
|
||||
zh_vector_push_back(&vector, &val2);
|
||||
zh_vector_push_back(&vector, &val3);
|
||||
uint16_t size = 0;
|
||||
ret = zh_vector_get_size(&vector, &size);
|
||||
if (ret == ESP_OK)
|
||||
{
|
||||
printf("Vector size: %u\n", size);
|
||||
}
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
int item_value = 0;
|
||||
esp_err_t err = zh_vector_get_item(&vector, (uint16_t)i, &item_value);
|
||||
if (err == ESP_OK)
|
||||
{
|
||||
printf("Element %d: %d\n", i, item_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Error getting element %d: %s\n", i, esp_err_to_name(err));
|
||||
}
|
||||
}
|
||||
int new_val = 100;
|
||||
zh_vector_change_item(&vector, 1, &new_val);
|
||||
zh_vector_delete_item(&vector, 0);
|
||||
zh_vector_free(&vector);
|
||||
}
|
||||
```
|
||||
|
||||
### Struct Example
|
||||
|
||||
```c
|
||||
#include "zh_vector.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int id;
|
||||
char name[32];
|
||||
float value;
|
||||
} my_struct_t;
|
||||
|
||||
zh_vector_t *vector = NULL;
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
|
||||
esp_err_t ret = zh_vector_init(&vector, sizeof(my_struct_t));
|
||||
if (ret != ESP_OK)
|
||||
{
|
||||
printf("Vector initialization error\n");
|
||||
return;
|
||||
}
|
||||
my_struct_t item1 = {1, "Item 1", 1.5f};
|
||||
my_struct_t item2 = {2, "Item 2", 2.5f};
|
||||
zh_vector_push_front(&vector, &item1);
|
||||
zh_vector_push_back(&vector, &item2);
|
||||
my_struct_t item_value = {0};
|
||||
esp_err_t err = zh_vector_get_item(&vector, 0, &item_value);
|
||||
if (err == ESP_OK)
|
||||
{
|
||||
item_value.value = 10.5f;
|
||||
zh_vector_change_item(&vector, 0, &item_value);
|
||||
}
|
||||
zh_vector_free(&vector);
|
||||
}
|
||||
```
|
||||
|
||||
### String Example (Char Arrays)
|
||||
|
||||
```c
|
||||
#include "zh_vector.h"
|
||||
|
||||
zh_vector_t *vector = NULL;
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
|
||||
esp_err_t ret = zh_vector_init(&vector, 100);
|
||||
if (ret != ESP_OK)
|
||||
{
|
||||
printf("Vector initialization error\n");
|
||||
return;
|
||||
}
|
||||
char *str1 = malloc(100);
|
||||
char *str2 = malloc(100);
|
||||
if (str1 && str2)
|
||||
{
|
||||
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;
|
||||
ret = zh_vector_get_size(&vector, &size);
|
||||
if (ret == ESP_OK)
|
||||
{
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
char str_value[100] = {0};
|
||||
esp_err_t err = zh_vector_get_item(&vector, (uint16_t)i, str_value);
|
||||
if (err == ESP_OK)
|
||||
{
|
||||
printf("String %d: %s\n", i, str_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Error getting string %d: %s\n", i, esp_err_to_name(err));
|
||||
}
|
||||
}
|
||||
}
|
||||
zh_vector_remove_duplicates(&vector);
|
||||
zh_vector_free(&vector);
|
||||
}
|
||||
```
|
||||
|
||||
### Remove Duplicates Example
|
||||
|
||||
```c
|
||||
#include "zh_vector.h"
|
||||
|
||||
zh_vector_t *vector = NULL;
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
|
||||
esp_err_t ret = zh_vector_init(&vector, sizeof(int));
|
||||
if (ret != ESP_OK)
|
||||
{
|
||||
printf("Vector initialization error\n");
|
||||
return;
|
||||
}
|
||||
int val1 = 10;
|
||||
int val2 = 20;
|
||||
int val3 = 10;
|
||||
int val4 = 30;
|
||||
int val5 = 20;
|
||||
zh_vector_push_back(&vector, &val1);
|
||||
zh_vector_push_back(&vector, &val2);
|
||||
zh_vector_push_back(&vector, &val3);
|
||||
zh_vector_push_back(&vector, &val4);
|
||||
zh_vector_push_back(&vector, &val5);
|
||||
uint16_t size = 0;
|
||||
ret = zh_vector_get_size(&vector, &size);
|
||||
if (ret == ESP_OK)
|
||||
{
|
||||
printf("Vector size before removing duplicates: %u\n", size);
|
||||
}
|
||||
zh_vector_remove_duplicates(&vector);
|
||||
ret = zh_vector_get_size(&vector, &size);
|
||||
if (ret == ESP_OK)
|
||||
{
|
||||
printf("Vector size after removing duplicates: %u\n", size);
|
||||
}
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
int item_value = 0;
|
||||
esp_err_t err = zh_vector_get_item(&vector, (uint16_t)i, &item_value);
|
||||
if (err == ESP_OK)
|
||||
{
|
||||
printf("Element %d: %d\n", i, item_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Error getting element %d: %s\n", i, esp_err_to_name(err));
|
||||
}
|
||||
}
|
||||
zh_vector_free(&vector);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Find Item Example
|
||||
|
||||
```c
|
||||
#include "zh_vector.h"
|
||||
|
||||
zh_vector_t *vector = NULL;
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
|
||||
esp_err_t ret = zh_vector_init(&vector, sizeof(int));
|
||||
if (ret != ESP_OK)
|
||||
{
|
||||
printf("Vector initialization error\n");
|
||||
return;
|
||||
}
|
||||
int val1 = 10;
|
||||
int val2 = 20;
|
||||
int val3 = 30;
|
||||
zh_vector_push_back(&vector, &val1);
|
||||
zh_vector_push_back(&vector, &val2);
|
||||
zh_vector_push_back(&vector, &val3);
|
||||
int search_item = 20;
|
||||
int32_t found_index = -1;
|
||||
ret = zh_vector_find_item(&vector, &search_item, &found_index);
|
||||
if (ret == ESP_OK)
|
||||
{
|
||||
printf("Element %d found at index %d\n", search_item, (int)found_index);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Element %d not found (index=%d)\n", search_item, (int)found_index);
|
||||
}
|
||||
search_item = 100;
|
||||
found_index = -1;
|
||||
ret = zh_vector_find_item(&vector, &search_item, &found_index);
|
||||
if (ret == ESP_OK)
|
||||
{
|
||||
printf("Element %d found at index %d\n", search_item, (int)found_index);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Element %d not found (index=%d)\n", search_item, (int)found_index);
|
||||
}
|
||||
zh_vector_free(&vector);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Find Item in Field Example
|
||||
|
||||
```c
|
||||
#include "zh_vector.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int id;
|
||||
char name[32];
|
||||
float value;
|
||||
} my_struct_t;
|
||||
|
||||
zh_vector_t *vector = NULL;
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
esp_log_level_set("zh_vector", ESP_LOG_ERROR);
|
||||
esp_err_t ret = zh_vector_init(&vector, sizeof(my_struct_t));
|
||||
if (ret != ESP_OK)
|
||||
{
|
||||
printf("Vector initialization error\n");
|
||||
return;
|
||||
}
|
||||
my_struct_t item1 = {1, "Item 1", 1.5f};
|
||||
my_struct_t item2 = {2, "Item 2", 2.5f};
|
||||
my_struct_t item3 = {3, "Item 3", 3.5f};
|
||||
zh_vector_push_back(&vector, &item1);
|
||||
zh_vector_push_back(&vector, &item2);
|
||||
zh_vector_push_back(&vector, &item3);
|
||||
int search_id = 2;
|
||||
int32_t found_index = -1;
|
||||
my_struct_t sample = {0};
|
||||
ret = zh_vector_find_item_in_field(&vector, &sample, &sample.id, sizeof(sample.id), &search_id, 0, &found_index);
|
||||
if (ret == ESP_OK)
|
||||
{
|
||||
printf("Struct with id=%d found at index %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);
|
||||
if (ret == ESP_OK)
|
||||
{
|
||||
printf("Found item: id=%d, name=%s, value=%.1f\n", found_item.id, found_item.name, found_item.value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Struct with id=%d not found (index=%d)\n", search_id, (int)found_index);
|
||||
}
|
||||
search_id = 100;
|
||||
found_index = -1;
|
||||
ret = zh_vector_find_item_in_field(&vector, &sample, &sample.id, sizeof(sample.id), &search_id, 0, &found_index);
|
||||
if (ret == ESP_OK)
|
||||
{
|
||||
printf("Struct with id=%d found at index %d\n", search_id, (int)found_index);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Struct with id=%d not found (index=%d)\n", search_id, (int)found_index);
|
||||
}
|
||||
zh_vector_free(&vector);
|
||||
}
|
||||
```
|
||||
Reference in new issue
Block a user