1 #include "array.h"
2 
3 #include <string.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6 
data_array_copy(const data_unset * s)7 static data_unset *data_array_copy(const data_unset *s) {
8 	data_array *src = (data_array *)s;
9 	data_array *ds = data_array_init();
10 
11 	buffer_copy_string_buffer(ds->key, src->key);
12 	array_free(ds->value);
13 	ds->value = array_init_array(src->value);
14 	ds->is_index_key = src->is_index_key;
15 	return (data_unset *)ds;
16 }
17 
data_array_free(data_unset * d)18 static void data_array_free(data_unset *d) {
19 	data_array *ds = (data_array *)d;
20 
21 	buffer_free(ds->key);
22 	array_free(ds->value);
23 
24 	free(d);
25 }
26 
data_array_reset(data_unset * d)27 static void data_array_reset(data_unset *d) {
28 	data_array *ds = (data_array *)d;
29 
30 	/* reused array elements */
31 	buffer_reset(ds->key);
32 	array_reset(ds->value);
33 }
34 
data_array_insert_dup(data_unset * dst,data_unset * src)35 static int data_array_insert_dup(data_unset *dst, data_unset *src) {
36 	UNUSED(dst);
37 
38 	src->free(src);
39 
40 	return 0;
41 }
42 
data_array_print(const data_unset * d,int depth)43 static void data_array_print(const data_unset *d, int depth) {
44 	data_array *ds = (data_array *)d;
45 
46 	array_print(ds->value, depth);
47 }
48 
data_array_init(void)49 data_array *data_array_init(void) {
50 	data_array *ds;
51 
52 	ds = calloc(1, sizeof(*ds));
53 
54 	ds->key = buffer_init();
55 	ds->value = array_init();
56 
57 	ds->copy = data_array_copy;
58 	ds->free = data_array_free;
59 	ds->reset = data_array_reset;
60 	ds->insert_dup = data_array_insert_dup;
61 	ds->print = data_array_print;
62 	ds->type = TYPE_ARRAY;
63 
64 	return ds;
65 }
66