2 * Copyright (c) 2007, Novell Inc.
4 * This program is licensed under the BSD license, read LICENSE.BSD
5 * for further information
13 #ifndef SATSOLVER_QUEUE_H
14 #define SATSOLVER_QUEUE_H
16 #include "pooltypes.h"
18 typedef struct _Queue {
19 Id *elements; /* pointer to elements */
20 int count; /* current number of elements in queue */
21 Id *alloc; /* this is whats actually allocated, elements > alloc if shifted */
22 int left; /* space left in alloc *after* elements+count */
26 extern void queue_alloc_one(Queue *q);
34 q->left += (q->elements - q->alloc) + q->count;
35 q->elements = q->alloc;
48 return *q->elements++;
57 return q->elements[--q->count];
61 queue_unshift(Queue *q, Id id)
63 if (q->alloc && q->alloc != q->elements)
72 memmove(q->elements + 1, q->elements, sizeof(Id) * q->count);
79 queue_push(Queue *q, Id id)
83 q->elements[q->count++] = id;
88 queue_pushunique(Queue *q, Id id)
91 for (i = q->count; i > 0; )
92 if (q->elements[--i] == id)
98 queue_push2(Queue *q, Id id1, Id id2)
104 extern void queue_init(Queue *q);
105 extern void queue_init_buffer(Queue *q, Id *buf, int size);
106 extern void queue_init_clone(Queue *t, Queue *s);
107 extern void queue_free(Queue *q);
109 extern void queue_insert(Queue *q, int pos, Id id);
110 extern void queue_insert2(Queue *q, int pos, Id id1, Id id2);
111 extern void queue_delete(Queue *q, int pos);
112 extern void queue_delete2(Queue *q, int pos);
114 #endif /* SATSOLVER_QUEUE_H */