add mutex in main_list

This commit is contained in:
2025-09-25 23:54:34 +02:00
parent 12242987f3
commit 8a03fef531
+22 -1
View File
@@ -1,6 +1,8 @@
#ifndef __LIST_T_C__H #ifndef __LIST_T_C__H
#define __LIST_T_C__H #define __LIST_T_C__H
#include <pthread.h>
#include "tools_t/tools_t.h" #include "tools_t/tools_t.h"
#define TYPE_PTR void* #define TYPE_PTR void*
@@ -8,6 +10,7 @@
#define GENERATE_LIST_ALL(type)\ #define GENERATE_LIST_ALL(type)\
struct list_##type {\ struct list_##type {\
type value;\ type value;\
size_t index;\
struct list_##type *preview;\ struct list_##type *preview;\
struct list_##type *next;\ struct list_##type *next;\
};\ };\
@@ -17,6 +20,7 @@
size_t current_index;\ size_t current_index;\
struct list_##type *end_list;\ struct list_##type *end_list;\
size_t size;\ size_t size;\
pthread_mutex_t *mut_list;\
};\ };\
struct main_list_##type *create_var_list_##type();\ struct main_list_##type *create_var_list_##type();\
void push_back_list_##type(struct main_list_##type *var_list, type value);\ void push_back_list_##type(struct main_list_##type *var_list, type value);\
@@ -69,11 +73,14 @@ GENERATE_LIST_ALL(TYPE_PTR)
ret_var_list->current_list = NULL;\ ret_var_list->current_list = NULL;\
ret_var_list->current_index = 0;\ ret_var_list->current_index = 0;\
ret_var_list->size = 0;\ ret_var_list->size = 0;\
ret_var_list->mut_list = malloc(sizeof(pthread_mutex_t));\
pthread_mutex_init(ret_var_list->mut_list, NULL);\
return ret_var_list;\ return ret_var_list;\
}\ }\
void push_back_list_##type(struct main_list_##type *var_list, type value){\ void push_back_list_##type(struct main_list_##type *var_list, type value){\
struct list_##type * list_to_add = malloc(sizeof(struct list_##type));\ struct list_##type * list_to_add = malloc(sizeof(struct list_##type));\
list_to_add->value = value;\ list_to_add->value = value;\
list_to_add->index = var_list->size;\
list_to_add->preview = var_list->end_list;\ list_to_add->preview = var_list->end_list;\
list_to_add->next = NULL;\ list_to_add->next = NULL;\
if(var_list->end_list){\ if(var_list->end_list){\
@@ -101,6 +108,11 @@ GENERATE_LIST_ALL(TYPE_PTR)
}\ }\
var_list->begin_list = list_to_add;\ var_list->begin_list = list_to_add;\
++(var_list->size);\ ++(var_list->size);\
size_t index=0;\
while(list_to_add){\
list_to_add->index = index++;\
list_to_add = list_to_add->next;\
}\
}\ }\
size_t move_current_to_index_list_##type(struct main_list_##type *var_list, size_t index){\ size_t move_current_to_index_list_##type(struct main_list_##type *var_list, size_t index){\
if(index == var_list->current_index) return index;\ if(index == var_list->current_index) return index;\
@@ -171,6 +183,10 @@ GENERATE_LIST_ALL(TYPE_PTR)
}\ }\
}\ }\
++(var_list->size);\ ++(var_list->size);\
while(list_to_add){\
list_to_add->index = index++;\
list_to_add = list_to_add->next;\
}\
}\ }\
void remove_index_from_list_##type(struct main_list_##type *var_list, size_t index ){\ void remove_index_from_list_##type(struct main_list_##type *var_list, size_t index ){\
if( index == move_current_to_index_list_##type(var_list, index)) {\ if( index == move_current_to_index_list_##type(var_list, index)) {\
@@ -183,7 +199,10 @@ GENERATE_LIST_ALL(TYPE_PTR)
free(var_list->current_list);\ free(var_list->current_list);\
var_list->current_list = list_tmp_next;\ var_list->current_list = list_tmp_next;\
--(var_list->size);\ --(var_list->size);\
\ while(list_tmp_next){\
list_tmp_next->index = index++;\
list_tmp_next=list_tmp_next->next;\
}\
}\ }\
}\ }\
void remove_all_list_in_##type(struct main_list_##type *var_list){\ void remove_all_list_in_##type(struct main_list_##type *var_list){\
@@ -201,6 +220,8 @@ GENERATE_LIST_ALL(TYPE_PTR)
}\ }\
void free_all_var_list_##type(struct main_list_##type *var_list){\ void free_all_var_list_##type(struct main_list_##type *var_list){\
remove_all_list_in_##type(var_list);\ remove_all_list_in_##type(var_list);\
pthread_mutex_destroy(var_list->mut_list);\
free(var_list->mut_list);\
free(var_list);\ free(var_list);\
}\ }\
void increment_list_##type(struct main_list_##type * var_list){\ void increment_list_##type(struct main_list_##type * var_list){\