aboutsummaryrefslogtreecommitdiffstats
path: root/l4darr/d1arrstr.c
blob: 212760e15cd454813fa8bbb75dced16747c9ce3c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <string.h>
#include <l4darr.h>

L4DA* l4da_dup(const L4DA* arr){
    L4DA* newarr = l4da_create_setmax(
            l4da_itemsize(arr), l4da_getlen(arr), l4da_getmax(arr));
    if(newarr == NULL){
        return NULL;
    }
    memcpy(newarr->arr_data, arr->arr_data, 
            l4da_getlen(arr) * l4da_itemsize(arr));
    return newarr;
}

int l4da_combine(L4DA* arr, const L4DA* att){
    if(l4da_itemsize(arr) != l4da_itemsize(att)){
        return -2;
    }
    if(l4da_setlen(arr, l4da_getlen(arr) + l4da_getlen(att)) < 0){
        return -1;
    }
    memcpy(l4da_vp(arr, l4da_getlen(arr)), att->arr_data,
            l4da_getlen(att) * l4da_itemsize(att));
    return 0;
}

L4DA* l4da_filereadline_delim(FILE* infile, int chr){
    L4DA* newarr = l4da_create(1, 0);
    if(newarr == NULL){
        return NULL;
    }
    int c;
    char towrite;
    do{
        c = getc(infile);
        towrite = c;
        if(l4da_pushback(newarr, (void*)&towrite) < 0){
            l4da_free(newarr);
            return NULL;
        }
    }while(c != chr);
    return newarr;
}