OpenAPI: Add functions OpenAPI_list_clear and OpenAPI_list_insert_prev

This commit is contained in:
mitmitmitm 2022-11-23 12:28:40 +01:00 committed by Sukchan Lee
parent 02054bea31
commit dbd0e654c8
4 changed files with 68 additions and 0 deletions

View File

@ -29,8 +29,11 @@ typedef struct OpenAPI_list_s {
OpenAPI_list_t *OpenAPI_list_create(void);
void OpenAPI_list_free(OpenAPI_list_t *listToFree);
void OpenAPI_list_clear(OpenAPI_list_t *list);
void OpenAPI_list_add(OpenAPI_list_t *list, void *dataToAddInList);
void OpenAPI_list_insert_prev(
OpenAPI_list_t *list, OpenAPI_lnode_t *lnode, void *dataToAddInList);
OpenAPI_lnode_t *OpenAPI_list_find(OpenAPI_list_t *list, long indexOfElement);
void OpenAPI_list_remove(
OpenAPI_list_t *list, OpenAPI_lnode_t *elementToRemove);

View File

@ -101,6 +101,16 @@ void OpenAPI_list_free(OpenAPI_list_t *list)
}
}
void OpenAPI_list_clear(OpenAPI_list_t *list)
{
if (list) {
OpenAPI_list_iterate_forward(list, OpenAPI_lnode_free, NULL);
list->first = NULL;
list->last = NULL;
list->count = 0;
}
}
void OpenAPI_list_add(OpenAPI_list_t *list, void *dataToAddInList)
{
OpenAPI_lnode_t *newListEntry = listEntry_create(dataToAddInList);
@ -128,6 +138,27 @@ void OpenAPI_list_add(OpenAPI_list_t *list, void *dataToAddInList)
list->count++;
}
void OpenAPI_list_insert_prev(OpenAPI_list_t *list, OpenAPI_lnode_t *lnode,
void *dataToAddInList)
{
OpenAPI_lnode_t *newListEntry = listEntry_create(dataToAddInList);
if (newListEntry == NULL) {
ogs_assert_if_reached();
return;
} else if (lnode->prev == NULL) {
list->first = newListEntry;
lnode->prev = newListEntry;
newListEntry->prev = NULL;
newListEntry->next = lnode;
} else {
lnode->prev->next = newListEntry;
newListEntry->prev = lnode->prev;
newListEntry->next = lnode;
lnode->prev = newListEntry;
}
list->count++;
}
void OpenAPI_list_remove(OpenAPI_list_t *list, OpenAPI_lnode_t *elementToRemove)
{
OpenAPI_lnode_t *elementBeforeElementToRemove = elementToRemove->prev;

View File

@ -101,6 +101,16 @@ void OpenAPI_list_free(OpenAPI_list_t *list)
}
}
void OpenAPI_list_clear(OpenAPI_list_t *list)
{
if (list) {
OpenAPI_list_iterate_forward(list, OpenAPI_lnode_free, NULL);
list->first = NULL;
list->last = NULL;
list->count = 0;
}
}
void OpenAPI_list_add(OpenAPI_list_t *list, void *dataToAddInList)
{
OpenAPI_lnode_t *newListEntry = listEntry_create(dataToAddInList);
@ -128,6 +138,27 @@ void OpenAPI_list_add(OpenAPI_list_t *list, void *dataToAddInList)
list->count++;
}
void OpenAPI_list_insert_prev(OpenAPI_list_t *list, OpenAPI_lnode_t *lnode,
void *dataToAddInList)
{
OpenAPI_lnode_t *newListEntry = listEntry_create(dataToAddInList);
if (newListEntry == NULL) {
ogs_assert_if_reached();
return;
} else if (lnode->prev == NULL) {
list->first = newListEntry;
lnode->prev = newListEntry;
newListEntry->prev = NULL;
newListEntry->next = lnode;
} else {
lnode->prev->next = newListEntry;
newListEntry->prev = lnode->prev;
newListEntry->next = lnode;
lnode->prev = newListEntry;
}
list->count++;
}
void OpenAPI_list_remove(OpenAPI_list_t *list, OpenAPI_lnode_t *elementToRemove)
{
OpenAPI_lnode_t *elementBeforeElementToRemove = elementToRemove->prev;

View File

@ -29,8 +29,11 @@ typedef struct OpenAPI_list_s {
OpenAPI_list_t *OpenAPI_list_create(void);
void OpenAPI_list_free(OpenAPI_list_t *listToFree);
void OpenAPI_list_clear(OpenAPI_list_t *list);
void OpenAPI_list_add(OpenAPI_list_t *list, void *dataToAddInList);
void OpenAPI_list_insert_prev(
OpenAPI_list_t *list, OpenAPI_lnode_t *lnode, void *dataToAddInList);
OpenAPI_lnode_t *OpenAPI_list_find(OpenAPI_list_t *list, long indexOfElement);
void OpenAPI_list_remove(
OpenAPI_list_t *list, OpenAPI_lnode_t *elementToRemove);