From 95511ebe321dbfd9a1b403445dc33ded3eba1baf Mon Sep 17 00:00:00 2001 From: MrGeorgen Date: Tue, 21 Jul 2020 21:27:35 +0200 Subject: [PATCH] added remove and free functions for arrays --- .clangd/index/array.c.863DEEE048DB568B.idx | Bin 0 -> 858 bytes .clangd/index/file.c.AE428882B365CD9B.idx | Bin 0 -> 558 bytes include/acl/array.h | 3 +++ src/array.c | 19 +++++++++++++++++++ 4 files changed, 22 insertions(+) create mode 100644 .clangd/index/array.c.863DEEE048DB568B.idx create mode 100644 .clangd/index/file.c.AE428882B365CD9B.idx diff --git a/.clangd/index/array.c.863DEEE048DB568B.idx b/.clangd/index/array.c.863DEEE048DB568B.idx new file mode 100644 index 0000000000000000000000000000000000000000..0943b501c1a57b1a344568999ac40e9f345ea414 GIT binary patch literal 858 zcmWIYbaM-0W?*nm@vO*AElFfyU|`?@;^LB`ObJE?hIvd33>9C2O=l-w@zIZxE7wcjReeQe)>6Ltz5X&-8sn7*is zB)$KpCoa`E(N{MkjLJ@I7WuQm^HENYQJCfORY$I|*EY=(jgks*u{`v6 zUH0)im)@uur{wO^Iww1G>32mAfti1`_kAwzn6t1zFLu?^?C-n3l%G^^-M&DgsL;Y! zr_Onjk(inNkrS-u8{YpH_^#pk%^zJY%{lybE-_iA zURvy#Ojyk~zPGuy2llsrom)Te=B~ICN87LLjlCQ-bM+!N%e*6R^>^qzt;~3LBB|)d z6O$b(Z!A8Y2s$HPuk=Z+xH2~>0T@2qelP!VoZ!8|#~{VWAj%`aBMc@O7(f9D1YTT< z=E>oklld5gco{_5dD-Q_1YACOshr#9Y0EYF7^H#v`8fHc!312sVrK3UPjNX;9tJK3 z22m+CDJd`km+wrwKjnGH%IACx{6PJ@0=&Xt0xrLBb%)TO8ArbHF^B-|=j7uQ2NQ7l zJ%&Xmr`-5-m#l=sEiU}WfA4!llBl6*{j94w+j(n5+rQcuXFC^aV$6i3BH$;H+nh6IQJ x14hwvA6m=~Ra>gDh)Ie|Fi65A7#PG6OfdvAIX5K-7()zf92|@+oJ{P@tN?hX<-Y&` literal 0 HcmV?d00001 diff --git a/.clangd/index/file.c.AE428882B365CD9B.idx b/.clangd/index/file.c.AE428882B365CD9B.idx new file mode 100644 index 0000000000000000000000000000000000000000..b84888a46789a6597d384941e153a55504f3bbe4 GIT binary patch literal 558 zcmWIYbaPWsOnc89cAy zKiiHQ+hv{~dk`DkJHI~j@u}X5+jmWEug_xt#~e6yPB%kwWp0uJ&^KyJ-p>816`sn& zz{SA8&CJFu1|}F7K;8y|qSUnFV?df!mFdX7V19c>7H$?E7Qqu)<-aq$Vr&Td|A*zB<$ zq?n&uJofOSXHO?=;RSM;b(sw}-9KyJ^-0{EiG`bkheMEsTaZUkuvmeY`9pq9Do_mz zBMYmE?GdgUl~E!_9g#im+GgU()OQ{Z>0r4KE`vd)-{=#XFpz83WY_FbQz5 zaEmgEvKOW1B!YZZT$Eg_4`T3v2ryvep0KMw@tX1f|I9pmybQcBaY*DtdC9pcIlypY PVB_FmWZ`6DXJ!Qe1U$K} literal 0 HcmV?d00001 diff --git a/include/acl/array.h b/include/acl/array.h index 523f524..ebe7354 100644 --- a/include/acl/array.h +++ b/include/acl/array.h @@ -1,5 +1,8 @@ #ifndef array_h #define array_h +#include +void acl_arraylist_free(void *arraylist); +void* acl_arraylist_remove(void *arraylist_void, size_t index); void* acl_arraylist_create(size_t array_size, size_t sizeof_one_element); void* acl_arraylist_append(void *arraylist_void, void *element_void); #endif diff --git a/src/array.c b/src/array.c index e600969..20b193e 100644 --- a/src/array.c +++ b/src/array.c @@ -30,8 +30,27 @@ void* acl_arraylist_append(void *arraylist_void, void *element) { if(arraylist->len == arraylist->cap) { arraylist->cap = arraylist->len + 10; arraylist = realloc(arraylist, arraylist->cap * arraylist->sizeof_one_element + sizeof *arraylist); + if(!arraylist) return NULL; } memcpy((char*)(arraylist + 1) + arraylist->sizeof_one_element * arraylist->len, element, arraylist->sizeof_one_element); ++arraylist->len; return arraylist+1; } + +void acl_arraylist_free(void *arraylist) { + free((union arraylist_meta*)arraylist-1); +} + +void* acl_arraylist_remove(void *arraylist_void, size_t index) { + union arraylist_meta *arraylist = (union arraylist_meta*)arraylist_void - 1; + char *arraylist_char = arraylist_void; + if(index != arraylist->len - 1) { + memcpy(arraylist_char + arraylist->sizeof_one_element * index, arraylist_char + arraylist->sizeof_one_element * (arraylist->len - 1), arraylist->sizeof_one_element); + } + --arraylist->len; + if(arraylist->len < arraylist->cap - 10) { + arraylist->cap = arraylist->len; + arraylist = realloc(arraylist, arraylist->cap * arraylist->sizeof_one_element + sizeof *arraylist); + } + return arraylist; +}