Lines Matching refs:q

109 static int  Q_BSearch(queue *q, void *key,
131 int Q_Init(queue *q) in Q_Init() argument
133 if(q) { in Q_Init()
134 q->head = q->tail = NULL; in Q_Init()
135 q->cursor = q->head; in Q_Init()
136 q->size = 0; in Q_Init()
137 q->sorted = False_; in Q_Init()
157 int Q_AtHead(queue *q) in Q_AtHead() argument
159 return(q && q->cursor == q->head); in Q_AtHead()
177 int Q_AtTail(queue *q) in Q_AtTail() argument
179 return(q && q->cursor == q->tail); in Q_AtTail()
197 inline int Q_IsEmpty(queue *q) in Q_IsEmpty() argument
199 return(!q || q->size == 0); in Q_IsEmpty()
216 int Q_Size(queue *q) in Q_Size() argument
218 return q ? q->size : 0; in Q_Size()
236 void *Q_Head(queue *q) in Q_Head() argument
238 if(Q_IsEmpty(q)) in Q_Head()
241 q->cursor = q->head; in Q_Head()
243 return q->cursor->data; in Q_Head()
261 void *Q_Tail(queue *q) in Q_Tail() argument
263 if(Q_IsEmpty(q)) in Q_Tail()
266 q->cursor = q->tail; in Q_Tail()
268 return q->cursor->data; in Q_Tail()
286 int Q_PushHead(queue *q, void *d) in Q_PushHead() argument
288 if(q && d) { in Q_PushHead()
296 n = q->head; in Q_PushHead()
298 q->head = (node*)p; in Q_PushHead()
299 q->head->prev = NULL; in Q_PushHead()
301 if(q->size == 0) { in Q_PushHead()
302 q->head->next = NULL; in Q_PushHead()
303 q->tail = q->head; in Q_PushHead()
306 q->head->next = (datanode*)n; in Q_PushHead()
307 n->prev = q->head; in Q_PushHead()
310 q->head->data = d; in Q_PushHead()
311 q->size++; in Q_PushHead()
313 q->cursor = q->head; in Q_PushHead()
315 q->sorted = False_; in Q_PushHead()
338 int Q_PushTail(queue *q, void *d) in Q_PushTail() argument
340 if(q && d) { in Q_PushTail()
348 p = q->tail; in Q_PushTail()
349 q->tail = (node *)n; in Q_PushTail()
351 if(q->size == 0) { in Q_PushTail()
352 q->tail->prev = NULL; in Q_PushTail()
353 q->head = q->tail; in Q_PushTail()
356 q->tail->prev = (datanode *)p; in Q_PushTail()
357 p->next = q->tail; in Q_PushTail()
360 q->tail->next = NULL; in Q_PushTail()
362 q->tail->data = d; in Q_PushTail()
363 q->cursor = q->tail; in Q_PushTail()
364 q->size++; in Q_PushTail()
366 q->sorted = False_; in Q_PushTail()
390 void *Q_PopHead(queue *q) in Q_PopHead() argument
395 if(Q_IsEmpty(q)) in Q_PopHead()
398 d = q->head->data; in Q_PopHead()
399 n = q->head->next; in Q_PopHead()
400 free(q->head); in Q_PopHead()
402 q->size--; in Q_PopHead()
404 if(q->size == 0) in Q_PopHead()
405 q->head = q->tail = q->cursor = NULL; in Q_PopHead()
407 q->head = (node *)n; in Q_PopHead()
408 q->head->prev = NULL; in Q_PopHead()
409 q->cursor = q->head; in Q_PopHead()
412 q->sorted = False_; in Q_PopHead()
433 void *Q_PopTail(queue *q) in Q_PopTail() argument
438 if(Q_IsEmpty(q)) in Q_PopTail()
441 d = q->tail->data; in Q_PopTail()
442 p = q->tail->prev; in Q_PopTail()
443 free(q->tail); in Q_PopTail()
444 q->size--; in Q_PopTail()
446 if(q->size == 0) in Q_PopTail()
447 q->head = q->tail = q->cursor = NULL; in Q_PopTail()
449 q->tail = (node *)p; in Q_PopTail()
450 q->tail->next = NULL; in Q_PopTail()
451 q->cursor = q->tail; in Q_PopTail()
454 q->sorted = False_; in Q_PopTail()
477 void *Q_Next(queue *q) in Q_Next() argument
479 if(!q) in Q_Next()
482 if(!q->cursor || q->cursor->next == NULL) in Q_Next()
485 q->cursor = (node *)q->cursor->next; in Q_Next()
487 return q->cursor->data ; in Q_Next()
507 void *Q_Previous(queue *q) in Q_Previous() argument
509 if(!q) in Q_Previous()
512 if(q->cursor->prev == NULL) in Q_Previous()
515 q->cursor = (node *)q->cursor->prev; in Q_Previous()
517 return q->cursor->data; in Q_Previous()
521 void *Q_Iter_Del(queue *q, q_iter iter) in Q_Iter_Del() argument
526 if(!q) in Q_Iter_Del()
532 if(iter == (q_iter)q->head) in Q_Iter_Del()
533 return Q_PopHead(q); in Q_Iter_Del()
535 if(iter == (q_iter)q->tail) in Q_Iter_Del()
536 return Q_PopTail(q); in Q_Iter_Del()
547 if (q->cursor == (node*)iter) { in Q_Iter_Del()
549 q->cursor = p; in Q_Iter_Del()
551 q->cursor = n; in Q_Iter_Del()
560 q->size--; in Q_Iter_Del()
562 q->sorted = False_; in Q_Iter_Del()
586 void *Q_DelCur(queue* q) { in Q_DelCur() argument
587 if(q) { in Q_DelCur()
588 return Q_Iter_Del(q, (q_iter)q->cursor); in Q_DelCur()
610 void Q_Destroy(queue *q) in Q_Destroy() argument
612 while(!Q_IsEmpty(q)) { in Q_Destroy()
613 Q_PopHead(q); in Q_Destroy()
632 void *Q_Get(queue *q) in Q_Get() argument
634 if(!q) in Q_Get()
637 if(q->cursor == NULL) in Q_Get()
639 return q->cursor->data; in Q_Get()
658 int Q_Put(queue *q, void *data) in Q_Put() argument
660 if(q && data) { in Q_Put()
661 if(q->cursor == NULL) in Q_Put()
664 q->cursor->data = data; in Q_Put()
690 int Q_Find(queue *q, void *data, in Q_Find() argument
695 if (q == NULL) { in Q_Find()
699 d = Q_Head(q); in Q_Find()
703 d = Q_Next(q); in Q_Find()
704 } while(!Q_AtTail(q)); in Q_Find()
777 int Q_Sort(queue *q, int (*Comp)(const void *, const void *)) in Q_Sort() argument
785 if(q->sorted) { in Q_Sort()
788 q->sorted = False_; in Q_Sort()
793 index = malloc(q->size * sizeof(q->cursor->data)); in Q_Sort()
797 posn_index = malloc(q->size * sizeof(q->cursor)); in Q_Sort()
805 d = Q_Head(q); in Q_Sort()
806 for(i=0; i < q->size; i++) { in Q_Sort()
808 posn_index[i] = q->cursor; in Q_Sort()
809 d = Q_Next(q); in Q_Sort()
814 QuickSort(index, 0, q->size - 1, Comp); in Q_Sort()
818 dn = q->head; in Q_Sort()
828 Q_Find(q, d, Comp); in Q_Sort()
829 else Q_Head(q); in Q_Sort()
831 q->sorted = True_; in Q_Sort()
853 static int Q_BSearch( queue *q, void *key, in Q_BSearch() argument
859 hi = q->size - 1; in Q_BSearch()
897 void *Q_Seek(queue *q, void *data, int (*Comp)(const void *, const void *)) in Q_Seek() argument
901 if (q == NULL) { in Q_Seek()
905 if(!q->sorted) { in Q_Seek()
906 if(!Q_Sort(q, Comp)) in Q_Seek()
910 idx = Q_BSearch(q, data, Comp); in Q_Seek()
915 q->cursor = posn_index[idx]; in Q_Seek()
941 int Q_Insert(queue *q, void *data, int (*Comp)(const void *, const void *)) in Q_Insert() argument
943 if (q == NULL) { in Q_Insert()
947 Q_PushHead(q, data); in Q_Insert()
949 if(!Q_Sort(q, Comp)) in Q_Insert()
956 q_iter Q_Iter_Head(queue *q) { in Q_Iter_Head() argument
957 return q ? (q_iter)q->head : NULL; in Q_Iter_Head()
960 q_iter Q_Iter_Tail(queue *q) { in Q_Iter_Tail() argument
961 return q ? (q_iter)q->tail : NULL; in Q_Iter_Tail()