summaryrefslogtreecommitdiffstats
path: root/hw1/basic-arrstr.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw1/basic-arrstr.c')
-rw-r--r--hw1/basic-arrstr.c48
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;
+}