31 #include <uves_deque.h>
73 uves_deque_push_back(
uves_deque *d, cxptr what)
82 d->back = d->size + 1;
83 new_members = cpl_calloc(d->front + d->size + d->back,
sizeof(
void *));
85 for (i = 0; i < d->size; i++)
87 new_members[d->front + i] = d->members[d->front + i];
91 d->members = new_members;
96 d->members[d->front + d->size] = (cxptr)what;
104 uves_deque_push_front(
uves_deque *d, cxptr what)
114 d->front = d->size + 1;
115 new_members = cpl_calloc(d->front + d->size + d->back,
sizeof(
void *));
117 for (i = 0; i < d->size; i++)
119 new_members[d->front + i] = d->members[0 + i];
122 cpl_free(d->members);
123 d->members = new_members;
130 d->members[d->front] = what;
136 uves_deque_get(
const uves_deque *d, uves_deque_const_iterator indx)
139 assert( indx < d->size );
141 return d->members[d->front + indx];
145 uves_deque_erase(
uves_deque *d, uves_deque_iterator indx, cx_free_func deallocate)
151 assert( indx < d->size );
153 deallocate(d->members[d->front + indx]);
155 for (i = indx; i < d->size - 1; i++)
157 d->members[d->front + i] = d->members[d->front + i + 1];
167 uves_deque_insert(
uves_deque *d, uves_deque_iterator indx, cxptr what)
171 assert( indx <= d->size );
173 if ( indx == d->size )
175 uves_deque_push_back(d, what);
181 assert( indx < d->size );
182 assert( d->size > 1 );
184 uves_deque_push_back(d, d->members[d->front + d->size - 1]);
186 for (i = d->size-1; i > indx; i--)
188 d->members[d->front + i] = d->members[d->front + i - 1];
191 d->members[d->front + indx] = what;
207 uves_deque_destroy(
uves_deque *d, cx_free_func deallocate)
211 if (deallocate != NULL)
215 for (i = 0; i < d->size; i++)
217 deallocate(d->members[d->front + i]);
220 cpl_free(d->members);
230 return (d->size == 0);
248 uves_deque_next(
const uves_deque *d, uves_deque_const_iterator i)