diff options
| -rw-r--r-- | collections/double_ended_queue.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/collections/double_ended_queue.c b/collections/double_ended_queue.c index 81bee47..8a6a91e 100644 --- a/collections/double_ended_queue.c +++ b/collections/double_ended_queue.c @@ -104,14 +104,19 @@ void deq_push_front(root, item)  deq *root;  void *item;  { +	void *tmp; +  	if (!root) {  		return;  	} -	if (root->end == root->base + root->limit) { + +	tmp = (root->base + ((root->beg - 1) - root->base) % root->limit); +	if (tmp == root->beg) {  		deq_resize(root); +		tmp = (root->base + ((root->beg - 1) - root->base) % root->limit);  	} -	*(root->end++) = item; +	*(root->beg = tmp) = item;  }  void* deq_pop_front(root) | 
