2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
12 * Generic queue for use with Windows 95/DJGPP disk cache
14 ************************************************************************/
22 void QInit(Queue *queue)
26 queue->currpos = NULL;
29 void QAddT(Queue *queue, QLink* node, int ord)
31 /*QLink* node = new QLink;*/
38 queue->head = queue->tail = node;
40 queue->tail->next = node;
42 node->prev = queue->tail;
47 void QAddH(Queue *queue, QLink *node, int ord)
53 queue->head = queue->tail = node;
55 node->next = queue->head;
56 queue->head->prev = node;
62 void QAddOrd(Queue *queue, QLink *node, int ord)
64 /*QLink<T>* node = new QLink<T>;*/
71 queue->head = queue->tail = node;
74 while (p && ord >= p->ord) { /* add towards tail end if equals found */
78 if (p == queue->head) {
79 QAddH(queue, node, ord);
82 QAddT(queue, node, ord);
93 QLink* QServe(Queue *queue)
95 QLink *n = queue->head;
97 if (!queue->head) return NULL;
98 if (queue->head == queue->tail)
99 queue->head = queue->tail = NULL;
101 queue->head = n->next;
106 void QMoveToTail(Queue *queue, QLink *n, int ord)
109 QAddT(queue, n, ord);
112 void QRemove(Queue *queue, QLink *n)
114 /*QLink* n2 = NULL;*/
116 if (!queue->head) return;
117 /*while(n && n != x) {
121 if (n == queue->currpos) {
122 if (n == queue->head) queue->currpos = n->next;
123 if (n == queue->tail) queue->currpos = n->prev;
124 if (n->prev) queue->currpos = n->prev;
129 /*assert(n->prev->next == n);*/
130 n->prev->next = n->next;
133 queue->head = n->next;
137 /*assert(n->next->prev == n);*/
138 n->next->prev = n->prev;
141 queue->tail = n->prev;
146 QLink *QCurrent(Queue *queue)
148 /*if (currpos) return currpos->item;
150 return queue->currpos;
153 void QIterate(Queue *queue)
159 printf("node=%x, ord=%f\n", node, node->ord);
165 #endif /* DISKCACHE95 */