Lines Matching refs:q

104 static int  Q_BSearch(queue *q, void *key,
126 int Q_Init(queue *q) in Q_Init() argument
128 if(q) { in Q_Init()
129 q->head = q->tail = NULL; in Q_Init()
130 q->cursor = q->head; in Q_Init()
131 q->size = 0; in Q_Init()
132 q->sorted = False_; in Q_Init()
152 int Q_AtHead(queue *q) in Q_AtHead() argument
154 return(q && q->cursor == q->head); in Q_AtHead()
172 int Q_AtTail(queue *q) in Q_AtTail() argument
174 return(q && q->cursor == q->tail); in Q_AtTail()
192 inline int Q_IsEmpty(queue *q) in Q_IsEmpty() argument
194 return(!q || q->size == 0); in Q_IsEmpty()
211 int Q_Size(queue *q) in Q_Size() argument
213 return q ? q->size : 0; in Q_Size()
231 void *Q_Head(queue *q) in Q_Head() argument
233 if(Q_IsEmpty(q)) in Q_Head()
236 q->cursor = q->head; in Q_Head()
238 return q->cursor->data; in Q_Head()
256 void *Q_Tail(queue *q) in Q_Tail() argument
258 if(Q_IsEmpty(q)) in Q_Tail()
261 q->cursor = q->tail; in Q_Tail()
263 return q->cursor->data; in Q_Tail()
281 int Q_PushHead(queue *q, void *d) in Q_PushHead() argument
283 if(q && d) { in Q_PushHead()
291 n = q->head; in Q_PushHead()
293 q->head = (node*)p; in Q_PushHead()
294 q->head->prev = NULL; in Q_PushHead()
296 if(q->size == 0) { in Q_PushHead()
297 q->head->next = NULL; in Q_PushHead()
298 q->tail = q->head; in Q_PushHead()
301 q->head->next = (datanode*)n; in Q_PushHead()
302 n->prev = q->head; in Q_PushHead()
305 q->head->data = d; in Q_PushHead()
306 q->size++; in Q_PushHead()
308 q->cursor = q->head; in Q_PushHead()
310 q->sorted = False_; in Q_PushHead()
333 int Q_PushTail(queue *q, void *d) in Q_PushTail() argument
335 if(q && d) { in Q_PushTail()
343 p = q->tail; in Q_PushTail()
344 q->tail = (node *)n; in Q_PushTail()
346 if(q->size == 0) { in Q_PushTail()
347 q->tail->prev = NULL; in Q_PushTail()
348 q->head = q->tail; in Q_PushTail()
351 q->tail->prev = (datanode *)p; in Q_PushTail()
352 p->next = q->tail; in Q_PushTail()
355 q->tail->next = NULL; in Q_PushTail()
357 q->tail->data = d; in Q_PushTail()
358 q->cursor = q->tail; in Q_PushTail()
359 q->size++; in Q_PushTail()
361 q->sorted = False_; in Q_PushTail()
385 void *Q_PopHead(queue *q) in Q_PopHead() argument
390 if(Q_IsEmpty(q)) in Q_PopHead()
393 d = q->head->data; in Q_PopHead()
394 n = q->head->next; in Q_PopHead()
395 efree(q->head); in Q_PopHead()
397 q->size--; in Q_PopHead()
399 if(q->size == 0) in Q_PopHead()
400 q->head = q->tail = q->cursor = NULL; in Q_PopHead()
402 q->head = (node *)n; in Q_PopHead()
403 q->head->prev = NULL; in Q_PopHead()
404 q->cursor = q->head; in Q_PopHead()
407 q->sorted = False_; in Q_PopHead()
428 void *Q_PopTail(queue *q) in Q_PopTail() argument
433 if(Q_IsEmpty(q)) in Q_PopTail()
436 d = q->tail->data; in Q_PopTail()
437 p = q->tail->prev; in Q_PopTail()
438 efree(q->tail); in Q_PopTail()
439 q->size--; in Q_PopTail()
441 if(q->size == 0) in Q_PopTail()
442 q->head = q->tail = q->cursor = NULL; in Q_PopTail()
444 q->tail = (node *)p; in Q_PopTail()
445 q->tail->next = NULL; in Q_PopTail()
446 q->cursor = q->tail; in Q_PopTail()
449 q->sorted = False_; in Q_PopTail()
472 void *Q_Next(queue *q) in Q_Next() argument
474 if(!q) in Q_Next()
477 if(!q->cursor || q->cursor->next == NULL) in Q_Next()
480 q->cursor = (node *)q->cursor->next; in Q_Next()
482 return q->cursor->data ; in Q_Next()
502 void *Q_Previous(queue *q) in Q_Previous() argument
504 if(!q) in Q_Previous()
507 if(q->cursor->prev == NULL) in Q_Previous()
510 q->cursor = (node *)q->cursor->prev; in Q_Previous()
512 return q->cursor->data; in Q_Previous()
516 void *Q_Iter_Del(queue *q, q_iter iter) in Q_Iter_Del() argument
521 if(!q) in Q_Iter_Del()
527 if(iter == (q_iter)q->head) in Q_Iter_Del()
528 return Q_PopHead(q); in Q_Iter_Del()
530 if(iter == (q_iter)q->tail) in Q_Iter_Del()
531 return Q_PopTail(q); in Q_Iter_Del()
542 if (q->cursor == (node*)iter) { in Q_Iter_Del()
544 q->cursor = p; in Q_Iter_Del()
546 q->cursor = n; in Q_Iter_Del()
555 q->size--; in Q_Iter_Del()
557 q->sorted = False_; in Q_Iter_Del()
581 void *Q_DelCur(queue* q) { in Q_DelCur() argument
582 if(q) { in Q_DelCur()
583 return Q_Iter_Del(q, (q_iter)q->cursor); in Q_DelCur()
605 void Q_Destroy(queue *q) in Q_Destroy() argument
607 while(!Q_IsEmpty(q)) { in Q_Destroy()
608 Q_PopHead(q); in Q_Destroy()
627 void *Q_Get(queue *q) in Q_Get() argument
629 if(!q) in Q_Get()
632 if(q->cursor == NULL) in Q_Get()
634 return q->cursor->data; in Q_Get()
653 int Q_Put(queue *q, void *data) in Q_Put() argument
655 if(q && data) { in Q_Put()
656 if(q->cursor == NULL) in Q_Put()
659 q->cursor->data = data; in Q_Put()
685 int Q_Find(queue *q, void *data, in Q_Find() argument
690 if (q == NULL) { in Q_Find()
694 d = Q_Head(q); in Q_Find()
698 d = Q_Next(q); in Q_Find()
699 } while(!Q_AtTail(q)); in Q_Find()
772 int Q_Sort(queue *q, int (*Comp)(const void *, const void *)) in Q_Sort() argument
780 if(q->sorted) { in Q_Sort()
783 q->sorted = False_; in Q_Sort()
788 queue_index = emalloc(q->size * sizeof(q->cursor->data)); in Q_Sort()
792 queue_posn_index = emalloc(q->size * sizeof(q->cursor)); in Q_Sort()
800 d = Q_Head(q); in Q_Sort()
801 for(i=0; i < q->size; i++) { in Q_Sort()
803 queue_posn_index[i] = q->cursor; in Q_Sort()
804 d = Q_Next(q); in Q_Sort()
809 QuickSort(queue_index, 0, q->size - 1, Comp); in Q_Sort()
813 dn = q->head; in Q_Sort()
823 Q_Find(q, d, Comp); in Q_Sort()
824 else Q_Head(q); in Q_Sort()
826 q->sorted = True_; in Q_Sort()
848 static int Q_BSearch( queue *q, void *key, in Q_BSearch() argument
854 hi = q->size - 1; in Q_BSearch()
892 void *Q_Seek(queue *q, void *data, int (*Comp)(const void *, const void *)) in Q_Seek() argument
896 if (q == NULL) { in Q_Seek()
900 if(!q->sorted) { in Q_Seek()
901 if(!Q_Sort(q, Comp)) in Q_Seek()
905 idx = Q_BSearch(q, data, Comp); in Q_Seek()
910 q->cursor = queue_posn_index[idx]; in Q_Seek()
936 int Q_Insert(queue *q, void *data, int (*Comp)(const void *, const void *)) in Q_Insert() argument
938 if (q == NULL) { in Q_Insert()
942 Q_PushHead(q, data); in Q_Insert()
944 if(!Q_Sort(q, Comp)) in Q_Insert()
951 q_iter Q_Iter_Head(queue *q) { in Q_Iter_Head() argument
952 return q ? (q_iter)q->head : NULL; in Q_Iter_Head()
955 q_iter Q_Iter_Tail(queue *q) { in Q_Iter_Tail() argument
956 return q ? (q_iter)q->tail : NULL; in Q_Iter_Tail()