Lines Matching defs:vector
41 u_vector_init_pow2(struct u_vector *vector,
48 vector->head = 0;
49 vector->tail = 0;
50 vector->element_size = element_size;
51 vector->size = element_size * initial_element_count;
52 vector->data = malloc(vector->size);
54 return vector->data != NULL;
58 u_vector_add(struct u_vector *vector)
63 if (vector->head - vector->tail == vector->size) {
64 size = vector->size * 2;
68 src_tail = vector->tail & (vector->size - 1);
69 dst_tail = vector->tail & (size - 1);
71 /* Since we know that the vector is full, this means that it's
74 memcpy((char *)data + dst_tail, vector->data, vector->size);
76 /* In this case, the vector is split into two pieces and we have
81 split = u_align_u32(vector->tail, vector->size);
82 assert(vector->tail <= split && split < vector->head);
83 memcpy((char *)data + dst_tail, (char *)vector->data + src_tail,
84 split - vector->tail);
85 memcpy((char *)data + (split & (size - 1)), vector->data,
86 vector->head - split);
88 free(vector->data);
89 vector->data = data;
90 vector->size = size;
93 assert(vector->head - vector->tail < vector->size);
95 offset = vector->head & (vector->size - 1);
96 vector->head += vector->element_size;
98 return (char *)vector->data + offset;
102 u_vector_remove(struct u_vector *vector)
106 if (vector->head == vector->tail)
109 assert(vector->head - vector->tail <= vector->size);
111 offset = vector->tail & (vector->size - 1);
112 vector->tail += vector->element_size;
114 return (char *)vector->data + offset;