LinkedList new functions and fixes

This commit is contained in:
2023-03-15 05:52:33 +06:00
parent 6c6c4fff8b
commit a200f2c965
4 changed files with 81 additions and 36 deletions

View File

@@ -5,15 +5,8 @@ extern "C" {
#endif
#define LLNode_define(TYPE, TYPE_IS_PTR)\
LLNode(TYPE)* LLNode_##TYPE##_create(){ \
LLNode(TYPE)* node= (LLNode(TYPE)*)malloc(sizeof(*node)); \
node->prev=NULL; \
node->next=NULL; \
node->value=(TYPE){0}; \
return node; \
} \
\
LLNode(TYPE)* LLNode_##TYPE##_createFromValue(TYPE value){ \
LLNode(TYPE)* LLNode_##TYPE##_create(TYPE value){ \
LLNode(TYPE)* node= (LLNode(TYPE)*)malloc(sizeof(*node)); \
node->prev=NULL; \
node->next=NULL; \
@@ -26,14 +19,10 @@ void LLNode_##TYPE##_freeMembers(void* _node){ \
void* value_ptr=&node->value; \
if(TYPE_IS_PTR) value_ptr=*(TYPE**)value_ptr; \
ktDescriptor_##TYPE.freeMembers(value_ptr); \
if(node->prev) node->prev->next=NULL; \
if(node->next) node->next->prev=NULL; \
} \
\
void LLNode_##TYPE##_free(LLNode(TYPE)* node, bool free_value){ \
if(free_value) LLNode_##TYPE##_freeMembers(node); \
if(node->prev) node->prev->next=NULL; \
if(node->next) node->next->prev=NULL; \
free(node); \
} \
\
@@ -59,20 +48,6 @@ void LinkedList_##TYPE##_freeMembers(void* _l){ \
l->first_node=NULL; l->last_node=NULL; l->count=0; \
} \
\
void LinkedList_##TYPE##_insertPrev(LinkedList(TYPE)* llist, LLNode(TYPE)* newNode, LLNode(TYPE)* nextNode){ \
llist->count++; \
newNode->prev=nextNode->prev; \
newNode->next=nextNode; \
nextNode->prev=newNode; \
} \
\
void LinkedList_##TYPE##_insertNext(LinkedList(TYPE)* llist, LLNode(TYPE)* newNode, LLNode(TYPE)* prevNode){ \
llist->count++; \
newNode->prev=prevNode; \
newNode->next=prevNode->next; \
prevNode->next=newNode; \
} \
\
void LinkedList_##TYPE##_removePrev(LinkedList(TYPE)* llist, LLNode(TYPE)* nextNode, bool freeRemoved){ \
llist->count--; \
LLNode(TYPE)* removedNode=nextNode->prev; \
@@ -95,8 +70,6 @@ void LinkedList_##TYPE##_removeNext(LinkedList(TYPE)* llist, LLNode(TYPE)* prevN
\
LinkedList_##TYPE##_functions_t _LinkedList_##TYPE##_functions={ \
.freeMembers=LinkedList_##TYPE##_freeMembers, \
.insertPrev=LinkedList_##TYPE##_insertPrev, \
.insertNext=LinkedList_##TYPE##_insertNext, \
.removePrev=LinkedList_##TYPE##_removePrev, \
.removeNext=LinkedList_##TYPE##_removeNext \
}; \