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