This commit was manufactured by cvs2svn to create tag 'buildscript'.
[IRC.git] /
1 #include "queue.h"
2
3 primarypfq_t pqueue; //Global queue
4
5 void queueInit(void) {
6         /* Intitialize primary queue */
7         pqueue.front = pqueue.rear = NULL;
8         pthread_mutexattr_init(&pqueue.qlockattr);
9         pthread_mutexattr_settype(&pqueue.qlockattr, PTHREAD_MUTEX_RECURSIVE_NP);
10         pthread_mutex_init(&pqueue.qlock, &pqueue.qlockattr);
11         pthread_cond_init(&pqueue.qcond, NULL);
12 }
13
14 /* Delete the node pointed to by the front ptr of the queue */
15 void delqnode() {
16         prefetchqelem_t *delnode;
17         if((pqueue.front == NULL) && (pqueue.rear == NULL)) {
18                 printf("The queue is empty: UNDERFLOW %s, %d\n", __FILE__, __LINE__);
19                 return;
20         } else if ((pqueue.front == pqueue.rear) && pqueue.front != NULL && pqueue.rear != NULL) {
21                 free(pqueue.front);
22                 pqueue.front = pqueue.rear = NULL;
23         } else {
24                 delnode = pqueue.front;
25                 pqueue.front = pqueue.front->next;
26                 free(delnode);
27         }
28 }
29
30 void queueDelete(void) {
31         /* Remove each element */
32         while(pqueue.front != NULL)
33                 delqnode();
34         pqueue.front = pqueue.rear = NULL;
35 }
36
37 /* Inserts to the rear of primary prefetch queue */
38 void pre_enqueue(prefetchqelem_t *qnode) {
39         if(pqueue.front == NULL && pqueue.rear == NULL) {
40                 pqueue.front = pqueue.rear = qnode;
41         } else {
42                 qnode->next = NULL;
43                 pqueue.rear->next = qnode;
44                 pqueue.rear = qnode;
45         }
46 }
47
48 /* Return the node pointed to by the front ptr of the queue */
49 prefetchqelem_t *pre_dequeue(void) {
50         prefetchqelem_t *retnode;
51         if (pqueue.front == NULL) {
52                 printf("Queue empty: Underflow %s, %d\n", __FILE__, __LINE__);
53                 return NULL;
54         }
55         retnode = pqueue.front;
56         pqueue.front = pqueue.front->next;
57         if (pqueue.front == NULL)
58                 pqueue.rear = NULL;
59         retnode->next = NULL;
60
61         return retnode;
62 }
63
64 void queueDisplay() {
65         int offset = sizeof(prefetchqelem_t);
66         int *ptr;
67         int ntuples;
68         char *ptr1;
69         prefetchqelem_t *tmp = pqueue.front;
70         while(tmp != NULL) {
71                 ptr1 = (char *) tmp;
72                 ptr = (int *)(ptr1 + offset);
73                 ntuples = *ptr;
74                 tmp = tmp->next;
75         }
76 }
77
78 void predealloc(prefetchqelem_t *node) {
79         free(node);
80 }
81
82
83 #if 0
84 main() {
85         unsigned int oids[] = {11, 13};
86         short endoffsets[] = {2, 5};
87         short arrayfields[] = {2, 2, 1, 5, 6};
88         queueInit();
89         queueDisplay();
90         prefetch(2, oids, endoffsets, arrayfields);
91         queueDisplay();
92         unsigned int oids1[] = {21, 23, 25, 27};
93         short endoffsets1[] = {1, 2, 3, 4};
94         short arrayfields1[] = {3, 2, 1, 3};
95         prefetch(4, oids1, endoffsets1, arrayfields1);
96         queueDisplay();
97         delqnode();
98         queueDisplay();
99         delqnode();
100         queueDisplay();
101         delqnode();
102         queueDisplay();
103         delqnode();
104
105 }
106
107 #endif
108
109