Using acl Prefix

This commit is contained in:
2020-06-15 18:38:24 +02:00
parent c7feb38582
commit 7f968cba8e
3 changed files with 8 additions and 12 deletions

View File

@ -1,6 +1,7 @@
#include <stdio.h> #include <stdio.h>
#include <stddef.h> #include <stddef.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
union arraylist_meta { union arraylist_meta {
double dummy_double; double dummy_double;
@ -15,7 +16,7 @@ union arraylist_meta {
}; };
}; };
void* arraylist_create(size_t array_size, size_t sizeof_one_element) { void* acl_arraylist_create(size_t array_size, size_t sizeof_one_element) {
union arraylist_meta *arraylist_new = malloc(array_size * sizeof_one_element + sizeof*arraylist_new); union arraylist_meta *arraylist_new = malloc(array_size * sizeof_one_element + sizeof*arraylist_new);
arraylist_new->len = array_size; arraylist_new->len = array_size;
arraylist_new->cap = array_size; arraylist_new->cap = array_size;
@ -23,19 +24,14 @@ void* arraylist_create(size_t array_size, size_t sizeof_one_element) {
return arraylist_new+1; return arraylist_new+1;
} }
void* arraylist_append(void *arraylist_void, void *element_void) { void* acl_arraylist_append(void *arraylist_void, void *element) {
char *element = element_void;
union arraylist_meta *arraylist = arraylist_void; union arraylist_meta *arraylist = arraylist_void;
--arraylist; --arraylist;
if(arraylist->len == arraylist->cap) { if(arraylist->len == arraylist->cap) {
arraylist->cap = arraylist->len + 10; arraylist->cap = arraylist->len + 10;
arraylist = realloc(arraylist, arraylist->cap * arraylist->sizeof_one_element + sizeof *arraylist); arraylist = realloc(arraylist, arraylist->cap * arraylist->sizeof_one_element + sizeof *arraylist);
} }
char *arraylist_char = (char*)(arraylist+1); memcpy((char*)(arraylist + 1) + arraylist->sizeof_one_element * arraylist->len, element, arraylist->sizeof_one_element);
arraylist_char += arraylist->sizeof_one_element * arraylist->len;
for(size_t i = 0; i < arraylist->sizeof_one_element; ++arraylist_char, ++element, ++i) {
*arraylist_char = *element;
}
++arraylist->len; ++arraylist->len;
return arraylist+1; return arraylist+1;
} }

View File

@ -1,5 +1,5 @@
#ifndef array_h #ifndef array_h
#define array_h #define array_h
void* arraylist_create(size_t array_size, size_t sizeof_one_element); void* acl_arraylist_create(size_t array_size, size_t sizeof_one_element);
void* arraylist_append(void *arraylist_void, void *element_void); void* acl_arraylist_append(void *arraylist_void, void *element_void);
#endif #endif

View File

@ -3,9 +3,9 @@
#include <stddef.h> #include <stddef.h>
int main() { int main() {
int *int_array = arraylist_create(2, sizeof (int)); int *int_array = acl_arraylist_create(2, sizeof (int));
int_array[0] = 28; int_array[0] = 28;
int_array[1] = 20; int_array[1] = 20;
for(int i = 0; i < 10; ++i) arraylist_append(int_array, &i); for(int i = 0; i < 10; ++i) acl_arraylist_append(int_array, &i);
for(int i = 0; i < 12; ++i) printf("Index: %d Value: %d\n", i, int_array[i]); for(int i = 0; i < 12; ++i) printf("Index: %d Value: %d\n", i, int_array[i]);
} }