diff options
Diffstat (limited to 'hw1/basic-arrstr.c')
-rw-r--r-- | hw1/basic-arrstr.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/hw1/basic-arrstr.c b/hw1/basic-arrstr.c new file mode 100644 index 0000000..f15bd22 --- /dev/null +++ b/hw1/basic-arrstr.c @@ -0,0 +1,48 @@ +#include "xwrap.h" +#include <string.h> +#include "basic-array.h" + +Array* array_dup(const Array* arr){ + Array* newarr = array_create_setmax( + array_itemsize(arr), array_getlen(arr), array_getmax(arr)); + if(newarr == NULL){ + return NULL; + } + memcpy(newarr->arr_data, arr->arr_data, + array_getlen(arr) * array_itemsize(arr)); + return newarr; +} + +int array_combine(Array* arr, const Array* att){ + if(array_itemsize(arr) != array_itemsize(att)){ + return -2; + } + if(array_setlen(arr, array_getlen(arr) + array_getlen(att)) < 0){ + return -1; + } + memcpy(array_vp(arr, array_getlen(arr)), att->arr_data, + array_getlen(att) * array_itemsize(att)); + return 0; +} + +Array* array_filereadline_delim(FILE* infile, int chr){ + Array* newarr = array_create(1, 0); + if(newarr == NULL){ + return NULL; + } + int c; + char towrite; + while((c = getc(infile)) != chr && !feof(infile)){ + towrite = c; + if(array_pushback(newarr, (void*)&towrite) < 0){ + array_free(newarr); + return NULL; + } + } + towrite = '\0'; + if(array_pushback(newarr, (void*)&towrite) < 0){ + array_free(newarr); + return NULL; + } + return newarr; +} |