queue.c

Go to the documentation of this file.
00001 
00029 #include <stdio.h>
00030 #include <stdlib.h>
00031 #include <string.h>
00032 
00033 #include "queue.h"
00034 #include "omx_comp_debug_levels.h"
00035 
00041 void queue_init(queue_t* queue) {
00042   int i;
00043   qelem_t* newelem;
00044   qelem_t* current;
00045   queue->first = malloc(sizeof(qelem_t));
00046   memset(queue->first, 0, sizeof(qelem_t));
00047   current = queue->last = queue->first;
00048   queue->nelem = 0;
00049   for (i = 0; i<MAX_QUEUE_ELEMENTS - 2; i++) {
00050     newelem = malloc(sizeof(qelem_t));
00051     memset(newelem, 0, sizeof(qelem_t));
00052     current->q_forw = newelem;
00053     current = newelem;
00054   }
00055   current->q_forw = queue->first;
00056   
00057   pthread_mutex_init(&queue->mutex, NULL);
00058 }
00059 
00065 void queue_deinit(queue_t* queue) {
00066   int i;
00067   qelem_t* current;
00068   current = queue->first;
00069   for (i = 0; i<MAX_QUEUE_ELEMENTS - 2; i++) {
00070     if (current != NULL) {
00071       current = current->q_forw;
00072       free(queue->first);
00073       queue->first = current;
00074     }
00075   }
00076   if(queue->first) {
00077     free(queue->first);
00078     queue->first = NULL;
00079   }
00080   pthread_mutex_destroy(&queue->mutex);
00081 }
00082 
00089 void queue(queue_t* queue, void* data) {
00090   if (queue->last->data != NULL) {
00091     return;
00092   }
00093   pthread_mutex_lock(&queue->mutex);
00094   queue->last->data = data;
00095   queue->last = queue->last->q_forw;
00096   queue->nelem++;
00097   pthread_mutex_unlock(&queue->mutex);
00098 }
00099 
00107 void* dequeue(queue_t* queue) {
00108   void* data;
00109   if (queue->first->data == NULL) {
00110     return NULL;
00111   }
00112   pthread_mutex_lock(&queue->mutex);
00113   data = queue->first->data;
00114   queue->first->data = NULL;
00115   queue->first = queue->first->q_forw;
00116   queue->nelem--;
00117   pthread_mutex_unlock(&queue->mutex);
00118 
00119   return data;
00120 }
00121 
00128 int getquenelem(queue_t* queue) {
00129   int qelem;
00130   pthread_mutex_lock(&queue->mutex);
00131   qelem = queue->nelem;
00132   pthread_mutex_unlock(&queue->mutex);
00133   return qelem;
00134 }

Generated for OpenMAX Bellagio rel. 0.3.5-svn by  doxygen 1.5.1
SourceForge.net Logo