diff options
| author | ame <[email protected]> | 2024-02-27 09:57:26 -0600 |
|---|---|---|
| committer | ame <[email protected]> | 2024-02-27 09:57:26 -0600 |
| commit | 559556dc6cb4bd025da4b6855f54162baab9b249 (patch) | |
| tree | a088fa1d295f520f3b8094ef2a844241b46b461b /src/types | |
| parent | 764dea6ddb8fb8f164858426d755afc33b3a2f1d (diff) | |
cookies, clean memeory
Diffstat (limited to 'src/types')
| -rw-r--r-- | src/types/parray.c | 33 | ||||
| -rw-r--r-- | src/types/parray.h | 13 |
2 files changed, 37 insertions, 9 deletions
diff --git a/src/types/parray.c b/src/types/parray.c index 3c2a6cc..fae3cb5 100644 --- a/src/types/parray.c +++ b/src/types/parray.c @@ -6,6 +6,13 @@ #include "../lua.h"
#include "parray.h"
+void free_method(void* v, enum free_type free_meth){
+ if(v != NULL){
+ if(free_meth == FREE) free(v);
+ else if(free_meth == STR) str_free(v);
+ }
+}
+
parray_t* parray_init(){
parray_t* awa = malloc(sizeof * awa);
awa->P = malloc(sizeof * awa->P);
@@ -36,16 +43,36 @@ void* parray_get(parray_t* p, char* key){ return NULL;
}
+int parray_geti(parray_t* p, char* key){
+ for(int i = 0; i != p->len; i++){
+ if(strcmp(p->P[i].key->c, key) == 0){
+ return i;
+ }
+ }
+ return -1;
+}
+
+void parray_remove(parray_t* p, char* key, enum free_type free){
+ int ind = parray_geti(p, key);
+ if(ind == -1) return;
+
+ str_free(p->P[ind].key);
+ free_method(p->P[ind].value, free);
+
+ for(int i = ind; i < p->len - 1; i++) p->P[i] = p->P[i+1];
+ p->len--;
+ p->P = realloc(p->P, sizeof * p->P * (p->len + 1));
+}
+
void parray_lclear(parray_t* p){
free(p->P);
free(p);
}
-void parray_clear(parray_t* p, int clear_val){
+void parray_clear(parray_t* p, enum free_type clear_val){
for(int i = 0; i != p->len; i++){
str_free(p->P[i].key);
- if(clear_val == 1) free(p->P[i].value);
- else if(clear_val == 2) str_free(p->P[i].value);
+ free_method(p->P[i].value, clear_val);
}
parray_lclear(p);
}
diff --git a/src/types/parray.h b/src/types/parray.h index 9b9927a..306ade3 100644 --- a/src/types/parray.h +++ b/src/types/parray.h @@ -12,16 +12,17 @@ typedef struct { int len;
} parray_t;
-parray_t* parray_init();
+enum free_type {
+ NONE = 0, FREE = 1, STR = 2
+};
+parray_t* parray_init();
void parray_set(parray_t*, char*, void*);
-
void* parray_get(parray_t* , char*);
-
-void parray_clear(parray_t*, int);
-
+int parray_geti(parray_t* , char*);
+void parray_remove(parray_t* p, char* key, enum free_type free);
+void parray_clear(parray_t*, enum free_type);
void parray_lclear(parray_t*);
-
parray_t* parray_find(parray_t*, char*);
#endif //parray_h
\ No newline at end of file |
