From a3099d90c5a27de1218323fe2b40182f58722b10 Mon Sep 17 00:00:00 2001 From: Seoxi Ryouko Date: Fri, 28 Mar 2025 02:07:47 -0500 Subject: [PATCH] y no work --- hehe_array_test | Bin 0 -> 17344 bytes hehe_array_test.c | 29 ++++++++++++++ libhehe_array.h | 99 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100755 hehe_array_test create mode 100644 hehe_array_test.c create mode 100644 libhehe_array.h diff --git a/hehe_array_test b/hehe_array_test new file mode 100755 index 0000000000000000000000000000000000000000..a957692c3a50796e3325834a895bdf56c8cdc757 GIT binary patch literal 17344 zcmeHOeQX@Zb)P$05+#3#l5Cl=()esitz?HMlA>sZlIyJ?qthk{z6w6tXJlhZz0+q%L^H~^40T`+Nn}Py>=9v#U^97c(0{1LVGzb zeN4rUShA}RYjstBpQSTG&vPJzN<1kh^l#+$H`WN);GIlMZS%_xkz zcmG2JD)^L|p}L4XpaKE4V#g_Z34e-Qh#;Cm0Ho;&%%XFlG2*S8)%v1gog zsGj7LbSRO&3<(X?4z&o>B2bG!EdsR&)FM!eKrI5b2-G4_i@^U-1b)2sBfqeZU8%Px zS6tYkl>LR7e6W1pKK63`SzSVT*K2^wThHOR_I3+7;zvj}KUYTDdWLvf!pxu7{ENiX z5@voz^M6M?EoHFL`KL7hC&bh0e0~f()wkt` z2Z|RyWf%X&KK9l^-{DBhOv|hG?ChU!MD=c|gZfW~!fS7T1|~|8{@EpV>XdC+%D$J5 z`3}&MM3^r*szJziV>24uiIC}N0r><~WSg?x&C2cxsHP|1EEUbO{ z56FfJBINkZoL4CKJj0E4@eT6&{=bvg0r=@M#ZPh-CrKN%fM_xc5zz-wd!p+hx?mr_ zVWV91IN9bF$;aL3L9#?FE&(Aa^AZaP{={ZAgGpN^m`1Ru_IKN;uL z8QWP?x(gEBU7)(VK&y7w_x?=}C*#Nr5gM!1Y+y8m`|2g$$F4Nsyzs=_u7}D3RDtPG zBt5l>V)`!9eO2pHyQp~=dFZdEkQO70(;p?Bzi@SQ7eI-9>Ol!p z4bPcDi7`q&qnmyLhSOnkG3dHLlkP@2cT-n?uzw!FFvk^UasU;7LwBm~qBrd0ZR-q6 z8gx!m&!H;<7sw4xf=8*WW-9Av@44M)%Hnd&S)D?6Ot+HWcZ}Ym8%ooY=FCA8W=khn zgYr|zFLiq8CAw)$ufd^oiQ0x>%|@<(RhPFooi!|e2KYSGn2-SWj3 zsd6vTZI5dHUAp?vrCFa$t4>9zlAo3`S6BL~d-6xd*Gc#ioe$P)ikeYbuRnr8rLPrF z&hj+?CDOe_-`m~0Ilx+~MW7aeS_Enls70U_f&cdr*fE+MY;W5!8gCj+rVHau-|0}_w1^oId26rxlQyJCt>9vDuc-t~~0eA?1f9e8I&CjM~@D0o0 z*Dr&su|htlhO&u-N+nXM%wq|aO+-gWGclDi#BmVnn3Ky#vw0^KO{PgPm&mKJY%-l6 zA}%&Ip-73s->&xe9_ZTVw1!*S-0aS!Y-@Oza-88*Ce1D#)GUbS$3guI;0dODAZ3Q214;53z%)ab$aRSPW&d2oJpL*v^#xV+;)f@Tj+3k6BLJvc2bBn2v3 zsZ>-As+fwagc?#?<7?C!C*It+Rhl-?ghx7_3vqk1LjF&#{06l99mw^oGE%?flK+oFeiiahRM_{r z_PvldA^sl+b?aZ(6CefMe&9#Z4|jX*hnD<*3Gx`^?G^Sd+MY~msTP4+1ZokeMW7ae zS_Enl_`ei^sdbjF&ZA6e3PXw32$XIx1QSb3=V*>g>C&y1rXSKr%-{IEW?Dy4k~#Nn zhE?i5OXp}lMM>m8eZQO`J`}Qun0K>5?K>=D^*hi+EtbpN{22m~XdOnW(GYbDQz5dp zDDnCv$buQBGLM$E!>x=Tz0=Y;!M8Cl^``kWC0RpA`FMt;+f(BDSJ=D?`#)37}+T6OU zxuvB!wCzwL9?YEbY?J_ zt}5RDn;p&L_r%+qceS^M!r>jciCjD}mfL|Hj2+RzWK%kmPlRKtzprDb>fhJVqW1N4 z?7oI#Pj5%_HN^Wn;iB(AN1N)8bTq4EKMoaDNT!o{l&4GKymra?3SDdhK?fsow0z0EE?)MvSa6eVkd7EWItLe!3zwsJ=nlPv!ACON&DK zX!e+@>Hiw!L0r`&4y=wZXbc|WxCq|LxLltFw~+~`52p zO72gBe;N3CVLbHtW$;zFv4wCKw0Jy-$?0YE{}Fft^kw{r{+py9T;<;11^@mse*SeC zdBbCD&6sqeCp4ZwY6x1&n*0laCG)FqjxlrUAwiS>$s0MApftoY-h4oyb8m zo^ggpGlS7lC!Wt_b567{u40+g*k~f3h=-f2YdAx=fjQA^Hag)X()sKJHo2pzgcC2M zQWG%oa1Pz-DpW@jBMAobi5%S?4MO|k24_IKr_FGW#c(AX%V2lhBZjs!nn-)0u|jU7 zg3pY3*@;Xt{b?_tx9btNL^`fR*>kA#!H5%isM~Rr)BRfybv}4tADW1njT5mQBelB^ zDQAE0!LH6;=U`7yf8?-pxU;J_;^@tPOE&Gz_PlS$-<4t?pPm=Eyw*;{qxq=P@#bd& z6>{^mpaMdd!o=+Vqn;HH10c&~oRMfcKB^x{;Msy}izf=sfrGG%C(}+Lmx%K-3Rl6@ zCmmN#eALmilxRLd?xqAjGG1_`!V=Vj3?v)pHZ6d~^^r zpEYzua(WIooGygNvYD|&Hb0@lE;Lw3;;B_K&QNF9fhIZ)!rEy#pBT@pFpXV8a3+kY zFgY5DVu*y}6KND`Xg+Hsk0r9XWF}p~IFOV<;m7FF1s?JL3$|Q(>HsDV%01%u`?8Uf@)B-QsXGpU)--3pk(LYr%gb zL+dtL>){FJ;`-aPl%P0b*Z@V+kew%A7c9u+fRuhQ-*QPH)#OGTfTfZeUcTnQ*b;< z>;!rk8Lz#}r7!VrbSNwKvTmmNDRs5j%lhBG10d2fhPX#|=kmvpqqVl!pX2rQ zIkw-(no@t!6FLPst=)x}^?Ql!Ew=a9pJDYiWT;QXUiJ&N-DxzMSy9UOxBsu%zKiu_ z|KTXx&v@)Pq#a^D1U)(|3G&ihFVlVVPh`si*9w@Q>(Mof-e6bJ0 z*lREIZi@$=zrRS=o9O%`Us8XW$9Dgc_BV3*tnRuNd+r7om-2;fM25=t+h-X#D2nVs zSfN{y@m^x>M=h=Sa*HwO7DcwN77sahSVfciorXKf1|I=S_Y#S_T)$QWlh_#xb3ApA Zp|AOz`>KPrOm+LGdBMELXW(Pie*j!2Ja7O2 literal 0 HcmV?d00001 diff --git a/hehe_array_test.c b/hehe_array_test.c new file mode 100644 index 0000000..0c8ca2a --- /dev/null +++ b/hehe_array_test.c @@ -0,0 +1,29 @@ +#include +#include +#include +#include +#include "libhehe_array.h" + +#define ARRAY_LEN 10 +#define ARRAY2_START_INDEX 2 +#define ARRAY2_LEN 4 + +int main(void) { + struct HeheArray *array = hehe_alloc_array(ARRAY_LEN, sizeof(int)); + int i; + for(i = 0; i < ARRAY_LEN; i++) hehe_array_set(array, ARRAY_LEN - i - 1, &i); + for(i = 0; i < ARRAY_LEN; i++) { + printf("%d\n", *(int *)hehe_array_get(array, i)); + } + puts("\n\n"); + struct HeheArray *array2 = hehe_array_yoink(array, ARRAY2_START_INDEX, ARRAY2_LEN); + if(array2 == NULL) return 69; + for(i = 0; i < ARRAY2_LEN; i++) { + //printf("%d\n", *(int *)hehe_array_get(array2, i)); + } + puts("\n\n"); + for(i = 0; i < ARRAY_LEN - ARRAY2_LEN; i++) { + printf("%d\n", *(int *)hehe_array_get(array, i)); + } + return 0; +} diff --git a/libhehe_array.h b/libhehe_array.h new file mode 100644 index 0000000..1736024 --- /dev/null +++ b/libhehe_array.h @@ -0,0 +1,99 @@ + + +#ifndef HEHE_ARRAYLIB +#define HEHE_ARRAYLIB + +#define DEBUG +#ifdef DEBUG + +#include + +#endif + +#include +#include +#include + +struct HeheArray { + size_t type_size; + size_t len; + size_t max_len; + void *content; +}; + +static void *hehe_alloc_array(size_t initial_len, size_t type_size) { + if(initial_len == 0) initial_len = 1; + struct HeheArray *array = malloc(sizeof(*array)); + size_t max_len = 1; + while(initial_len >>= 1) max_len <<= 1; + + array->type_size = type_size; + array->len = initial_len; + array->max_len = max_len; + array->content = malloc(max_len * type_size); + memset(array->content, 0, max_len * type_size); + return array; +} + +static void hehe_array_set(struct HeheArray *array, size_t index, const void *value) { + if(index >= array->max_len) { + array->content = realloc(array->content, (array->max_len << 1) * array->type_size); + memset(array->content + array->max_len * array->type_size, 0, array->max_len * array->type_size); + array->max_len <<= 1; + } + if(index >= array->len) array->len = index + 1; + memcpy(array->content + index * array->type_size, value, array->type_size); +} + +static void *hehe_array_get(struct HeheArray *array, size_t index) { + if(index >= array->len) return NULL; // is ur fault + return array->content + array->type_size * index; +} + +static int hehe_array_copy(struct HeheArray *array, size_t index, void *value) { + if(index >= array->len) return -1; // is ur fault + memcpy(value, array->content + array->type_size * index, array->type_size); + return 0; +} + +static void hehe_array_set_len(struct HeheArray *array, size_t new_len) { + if(new_len >= array->max_len) { + size_t new_max_len = 1; + size_t len = new_len; + while(len >>= 1) new_max_len <<= 1; + array->content = realloc(array->content, new_max_len * array->type_size); + memset(array->content + array->max_len * array->type_size, 0, (new_max_len - array->max_len) * array->type_size); + array->max_len <<= 1; + } + array->len = new_len; +} + +static void hehe_array_push(struct HeheArray *array, const void *value) { + hehe_array_set(array, array->len, value); +} + +static int hehe_array_pop(struct HeheArray *array, void *value) { + return hehe_array_copy(array, array->len, value) || ((array->len -= 1) && 0); +} + +static struct HeheArray *hehe_array_yoink(struct HeheArray *array, size_t start_index, size_t len) { + puts("a"); + if(start_index + len >= array->len) return NULL; + puts("b"); + struct HeheArray *ret = hehe_alloc_array(len, array->type_size); + puts("c"); + memcpy(ret->content, array->content + start_index * array->type_size, len * array->type_size); + puts("d"); + memmove(array->content + start_index * array->type_size, array->content + (start_index + len) * array->type_size, (array->len - len - start_index) * array->type_size); + puts("e"); + hehe_array_set_len(array, array->len - len); + puts("f"); + return ret; +} + +static void hehe_array_free(struct HeheArray *array) { + free(array->content); + free(array); +} + +#endif