aboutsummaryrefslogtreecommitdiff
path: root/deque.c
diff options
context:
space:
mode:
Diffstat (limited to 'deque.c')
-rw-r--r--deque.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/deque.c b/deque.c
index 56df165..5800997 100644
--- a/deque.c
+++ b/deque.c
@@ -164,6 +164,22 @@ deque_push_back(struct deque *d, T data)
164 ++d->size; 164 ++d->size;
165} 165}
166 166
167void
168deque_push_front(struct deque *d, T data)
169{
170 if ( d->offset == 0 ) { // Im ersten Element ist kein Platz mehr frei!
171 map_prepend_chunk(d);
172 d->offset = CHUNK_CAPACITY;
173 }
174
175 --d->offset;
176
177 size_t chunk_num = (d->offset / CHUNK_CAPACITY + d->map_begin) % d->map_capacity;
178
179 d->map[chunk_num][d->offset] = data;
180 ++d->size;
181}
182
167bool 183bool
168deque_pop_front(struct deque *d, T *data) 184deque_pop_front(struct deque *d, T *data)
169{ 185{
@@ -209,6 +225,10 @@ main(void)
209 //deque_show(&c); 225 //deque_show(&c);
210 } 226 }
211 227
228 for ( int i = 0; i != 100; ++i ) {
229 deque_push_front(&c, 1000 + i);
230 }
231
212 T data; 232 T data;
213 while ( deque_pop_front(&c, &data) ) { 233 while ( deque_pop_front(&c, &data) ) {
214 printf("%u, ", data); 234 printf("%u, ", data);