Update Makefile
[IRC.git] / Robust / src / Runtime / DSTM / interface / mcpileq.c
1 #include "mcpileq.h"
2
3 mcpileq_t mcqueue;
4
5 void mcpileqInit(void) {
6         /* Initialize machine queue that containing prefetch oids and offset values  sorted by remote machineid */  
7         mcqueue.front = mcqueue.rear = NULL;
8         pthread_mutex_init(&mcqueue.qlock, NULL); 
9         pthread_cond_init(&mcqueue.qcond, NULL); 
10 }
11
12 /* Insert to the rear of machine pile queue */
13 /*
14 void mcpileenqueue(prefetchpile_t *node) {
15         if(mcqueue.front == NULL && mcqueue.rear == NULL) {
16                 mcqueue.front = mcqueue.rear = node;
17         } else {
18                 node->next = NULL;
19                 mcqueue.rear->next = node;
20                 mcqueue.rear = node;
21         }
22 }
23 */
24
25 void mcpileenqueue(prefetchpile_t *node) {
26         prefetchpile_t *tmp, *prev;
27         if(mcqueue.front == NULL && mcqueue.rear == NULL) {
28                 tmp = mcqueue.front = node;
29                 while(tmp != NULL) {
30                         prev = tmp;
31                         tmp = tmp->next;
32                 }
33                 mcqueue.rear = prev;
34         } else {
35                 tmp = mcqueue.rear->next = node;
36                 while(tmp != NULL) {
37                         prev = tmp;
38                         tmp = tmp->next;
39                 }
40                 mcqueue.rear = prev;
41         }
42 }
43
44 /* Return the node pointed to by the front ptr of the queue */
45 prefetchpile_t *mcpiledequeue(void) {
46         prefetchpile_t *retnode;
47         if(mcqueue.front == NULL) {
48                 printf("Machune pile queue empty: Underfloe %s %d\n", __FILE__, __LINE__);
49                 return NULL;
50         }
51         retnode = mcqueue.front;
52         mcqueue.front = mcqueue.front->next;
53
54         return retnode;
55 }
56
57 /* Delete the node pointed to by the front ptr of the queue */
58 void delnode() {
59         prefetchpile_t *delnode;
60         if((mcqueue.front == NULL) && (mcqueue.rear == NULL)) {
61                 printf("The queue is empty: UNDERFLOW %s, %d\n", __FILE__, __LINE__);
62                 return;
63         } else if ((mcqueue.front == mcqueue.rear) && mcqueue.front != NULL && mcqueue.rear != NULL) {
64                 printf("TEST1\n");
65                 free(mcqueue.front);
66                 mcqueue.front = mcqueue.rear = NULL;
67         } else {
68                 delnode = mcqueue.front;
69                 mcqueue.front = mcqueue.front->next;
70                 printf("TEST2\n");
71                 free(delnode);
72         }
73 }
74
75 void mcpiledelete(void) {
76         /* Remove each element */
77         while(mcqueue.front != NULL)
78                 delqnode();
79         mcqueue.front = mcqueue.rear = NULL;
80 }
81
82
83 void mcpiledisplay() {
84         int mid;
85
86         prefetchpile_t *tmp = mcqueue.front;
87         while(tmp != NULL) {
88                 printf("Remote machine id = %d\n", tmp->mid);
89                 tmp = tmp->next;
90         }
91 }
92
93
94
95
96
97
98