OpenMAX Bellagio 0.9.3
queue.c
Go to the documentation of this file.
1
26#include <stdio.h>
27#include <stdlib.h>
28#include <string.h>
29
30#include "queue.h"
32
39 int i;
40 qelem_t* newelem;
41 qelem_t* current;
42 i = pthread_mutex_init(&queue->mutex, NULL);
43 if (i!=0) {
44 return -1;
45 }
46 queue->first = malloc(sizeof(qelem_t));
47 if (!(queue->first)) {
48 return -1;
49 }
50 memset(queue->first, 0, sizeof(qelem_t));
51 current = queue->last = queue->first;
52 queue->nelem = 0;
53 for (i = 0; i<MAX_QUEUE_ELEMENTS - 2; i++) {
54 newelem = malloc(sizeof(qelem_t));
55 if (!newelem) {
56 // the memory is not enough. Free all
57 while(queue->first!=NULL) {
58 current = queue->first->q_forw;
59 free(queue->first);
60 queue->first = current;
61 }
62 return -1;
63 }
64 memset(newelem, 0, sizeof(qelem_t));
65 current->q_forw = newelem;
66 current = newelem;
67 }
68 current->q_forw = queue->first;
69 return 0;
70}
71
78 int i;
79 qelem_t* current;
80 current = queue->first;
81 for (i = 0; i<MAX_QUEUE_ELEMENTS - 2; i++) {
82 if (current != NULL) {
83 current = current->q_forw;
84 free(queue->first);
85 queue->first = current;
86 }
87 }
88 if(queue->first) {
89 free(queue->first);
90 queue->first = NULL;
91 }
92 pthread_mutex_destroy(&queue->mutex);
93}
94
103int queue(queue_t* queue, void* data) {
104 if (queue->last->data != NULL) {
105 return -1;
106 }
107 pthread_mutex_lock(&queue->mutex);
108 queue->last->data = data;
109 queue->last = queue->last->q_forw;
110 queue->nelem++;
111 pthread_mutex_unlock(&queue->mutex);
112 return 0;
113}
114
123 void* data;
124 if (queue->first->data == NULL) {
125 return NULL;
126 }
127 pthread_mutex_lock(&queue->mutex);
128 data = queue->first->data;
129 queue->first->data = NULL;
130 queue->first = queue->first->q_forw;
131 queue->nelem--;
132 pthread_mutex_unlock(&queue->mutex);
133
134 return data;
135}
136
144 int qelem;
145 pthread_mutex_lock(&queue->mutex);
146 qelem = queue->nelem;
147 pthread_mutex_unlock(&queue->mutex);
148 return qelem;
149}
int queue(queue_t *queue, void *data)
Definition: queue.c:103
void * dequeue(queue_t *queue)
Definition: queue.c:122
void queue_deinit(queue_t *queue)
Definition: queue.c:77
int queue_init(queue_t *queue)
Definition: queue.c:38
int getquenelem(queue_t *queue)
Definition: queue.c:143
#define MAX_QUEUE_ELEMENTS
Definition: queue.h:32
Definition: queue.h:36
qelem_t * q_forw
Definition: queue.h:37
Definition: queue.h:43

Generated for OpenMAX Bellagio rel. 0.9.3 by  doxygen 1.5.1
SourceForge.net Logo