aboutsummaryrefslogtreecommitdiff
path: root/src/parray.c
blob: 077a67fcd28a45a54b1dc39a32f5b9d783de259d (plain)
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
44
45
#include <stdio.h>
#include "i_str.h"
#include <stdlib.h>
#include <string.h>

#include "parray.h"

parray_t* parray_init(){
    parray_t* awa = malloc(sizeof * awa);
    awa->P = malloc(sizeof * awa->P);
    awa->len = 0;
    return awa;
}

void parray_set(parray_t* p, char* key, void* value){
    for(int i = 0; i != p->len; i++){
        if(strcmp(p->P[i].key->c, key) == 0){
            p->P[p->len - 1].value = value;
            return;
        }
    }

    p->len++;
    p->P = realloc(p->P, sizeof * p->P * (p->len + 1));
    p->P[p->len - 1].key = str_init(key);
    p->P[p->len - 1].value = value;
}

void* parray_get(parray_t* p, char* key){
    for(int i = 0; i != p->len; i++){
        if(strcmp(p->P[i].key->c, key) == 0){
            return p->P[i].value;
        }
    }
    return NULL;
}

void parray_clear(parray_t* p, int clear_val){
    for(int i = 0; i != p->len; i++){
        str_free(p[i].P->key);
        if(clear_val) free(p[i].P->value);
    }
    free(p->P);
    free(p);
}