#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;
}