MEGATRON



LOG | FILES | OVERVIEW


#ifndef GQUEUE_C
#define GQUEUE_C GQUEUE_C
#include<queue.h>


void Queue_Init(struct Queue *q)
{
	q->first=q->last=NULL;
	q->size=0;
}
void Queue_Push(struct Queue *q,void *data)
{
	if(q==NULL)return;
	if(q->first==NULL)
	{
		q->first=q->last=malloc(sizeof(struct Queue_Node));	

		q->first->data=data;
		q->first->prev=NULL;

		++q->size;
	}else
	{
		struct Queue_Node *temp=malloc(sizeof(struct Queue_Node));
		q->last->prev=temp;
		temp->data=data;
		temp->prev=NULL;
		q->last=temp;
		++q->size;
	}

}
void* Queue_Pop(struct Queue *q)
{
	if(q==NULL)return NULL;
	if(q->size==0)return NULL;

	void *return_value=q->first->data;

	if(q->size==1)
	{
		free(q->last);
		q->first=q->last=NULL;
		q->size=0;
	}else
	{
		struct Queue_Node *temp_first=q->first;
		q->first=q->first->prev;
		free(temp_first);
		--q->size;
	}
	return return_value;
}
void Queue_Destroy(struct Queue *q)
{
	
	struct Queue_Node *temp_first;
	while(q->first!=NULL)
	{
		temp_first=q->first;
		q->first=q->first->prev;
		free(temp_first->data);
		free(temp_first);	
	}	

}
#endif