diff options
Diffstat (limited to 'deque.c')
| -rw-r--r-- | deque.c | 20 |
1 files changed, 20 insertions, 0 deletions
| @@ -164,6 +164,22 @@ deque_push_back(struct deque *d, T data) | |||
| 164 | ++d->size; | 164 | ++d->size; |
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | void | ||
| 168 | deque_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 | |||
| 167 | bool | 183 | bool |
| 168 | deque_pop_front(struct deque *d, T *data) | 184 | deque_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); |
