/* * queue.c * Description: * * Created on: 2014-11-13 * Author: Graydon * Modify: */ #include #include #include #include #include "drv/hmem.h" #include "queue.h" typedef struct{ int wr; int rd; int len; int count; int lock; char data[4]; }tag_queue,*ptag_queue; void* queue_create(int size) { ptag_queue q = malloc(size+(sizeof(tag_queue)-4)); assert(q!=0); q->len = size; q->wr=q->rd=0; q->count =0; q->lock =0; return q; } int queue_push(void* queue, const void* data, int size ) { ptag_queue q = queue; memcpy(q->data+q->wr,data,size); q->wr+=size; if(q->wr>=q->len){ q->wr=0; } q->count+=size; return size; } int queue_count(void* queue) { ptag_queue q = queue; return q->count; } int queue_pop(void* queue,void* data, int size) { ptag_queue q = queue; memcpy(data,q->data+q->rd,size); q->rd+=size; if(q->rd>=q->len){ q->rd = 0; } q->count-=size; return size; } void queue_destroy(void* queue) { free(queue); }