Lines Matching defs:vector
38 u_vector_init(struct u_vector *vector, uint32_t element_size, uint32_t size)
43 vector->head = 0;
44 vector->tail = 0;
45 vector->element_size = element_size;
46 vector->size = size;
47 vector->data = malloc(size);
49 return vector->data != NULL;
53 u_vector_add(struct u_vector *vector)
58 if (vector->head - vector->tail == vector->size) {
59 size = vector->size * 2;
63 src_tail = vector->tail & (vector->size - 1);
64 dst_tail = vector->tail & (size - 1);
66 /* Since we know that the vector is full, this means that it's
69 memcpy((char *)data + dst_tail, vector->data, vector->size);
71 /* In this case, the vector is split into two pieces and we have
76 split = u_align_u32(vector->tail, vector->size);
77 assert(vector->tail <= split && split < vector->head);
78 memcpy((char *)data + dst_tail, (char *)vector->data + src_tail,
79 split - vector->tail);
80 memcpy((char *)data + (split & (size - 1)), vector->data,
81 vector->head - split);
83 free(vector->data);
84 vector->data = data;
85 vector->size = size;
88 assert(vector->head - vector->tail < vector->size);
90 offset = vector->head & (vector->size - 1);
91 vector->head += vector->element_size;
93 return (char *)vector->data + offset;
97 u_vector_remove(struct u_vector *vector)
101 if (vector->head == vector->tail)
104 assert(vector->head - vector->tail <= vector->size);
106 offset = vector->tail & (vector->size - 1);
107 vector->tail += vector->element_size;
109 return (char *)vector->data + offset;