Lines Matching refs:array

34 struct array {
41 static INLINE struct array *array_create(VGint datatype_size)
43 struct array *array = CALLOC_STRUCT(array);
44 array->datatype_size = datatype_size;
46 array->size = DEFAULT_ARRAY_SIZE;
47 array->data = malloc(array->size * array->datatype_size);
49 return array;
53 static INLINE struct array *array_create_size(VGint datatype_size, VGint size)
55 struct array *array = CALLOC_STRUCT(array);
56 array->datatype_size = datatype_size;
58 array->size = size;
59 array->data = malloc(array->size * array->datatype_size);
61 return array;
64 static INLINE void array_destroy(struct array *array)
66 if (array)
67 free(array->data);
68 FREE(array);
71 static INLINE void array_resize(struct array *array, int num)
73 VGint size = array->datatype_size * num;
75 memcpy(data, array->data, array->size * array->datatype_size);
76 free(array->data);
77 array->data = data;
78 array->size = num;
79 array->num_elements = (array->num_elements > num) ? num :
80 array->num_elements;
83 static INLINE void array_append_data(struct array *array,
88 while (array->num_elements + num_elements > array->size) {
89 array_resize(array, (array->num_elements + num_elements) * 1.5);
91 adata = (VGbyte *)array->data;
92 memcpy(adata + (array->num_elements * array->datatype_size), data,
93 num_elements * array->datatype_size);
94 array->num_elements += num_elements;
97 static INLINE void array_change_data(struct array *array,
102 VGbyte *adata = (VGbyte *)array->data;
103 memcpy(adata + (start_idx * array->datatype_size), data,
104 num_elements * array->datatype_size);
107 static INLINE void array_remove_element(struct array *array,
110 VGbyte *adata = (VGbyte *)array->data;
111 memmove(adata + (idx * array->datatype_size),
112 adata + ((idx + 1) * array->datatype_size),
113 (array->num_elements - idx - 1) * array->datatype_size);
114 --array->num_elements;
117 static INLINE void array_reset(struct array *array)
119 array->num_elements = 0;