/*
* queue.h
- *
+ *
*/
-#ifndef SATSOLVER_QUEUE_H
-#define SATSOLVER_QUEUE_H
+#ifndef LIBSOLV_QUEUE_H
+#define LIBSOLV_QUEUE_H
#include "pooltypes.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
typedef struct _Queue {
Id *elements; /* pointer to elements */
int count; /* current number of elements in queue */
} Queue;
-extern void queue_alloc_one(Queue *q);
+extern void queue_alloc_one(Queue *q); /* internal */
+extern void queue_alloc_one_head(Queue *q); /* internal */
/* clear queue */
static inline void
static inline void
queue_unshift(Queue *q, Id id)
{
- if (q->alloc && q->alloc != q->elements)
- {
- *--q->elements = id;
- q->count++;
- return;
- }
- if (!q->left)
- queue_alloc_one(q);
- if (q->count)
- memmove(q->elements + 1, q->elements, sizeof(Id) * q->count);
+ if (!q->alloc || q->alloc == q->elements)
+ queue_alloc_one_head(q);
+ *--q->elements = id;
q->count++;
- q->elements[0] = id;
- q->left--;
}
static inline void
queue_push(q, id2);
}
+static inline void
+queue_truncate(Queue *q, int n)
+{
+ if (q->count > n)
+ {
+ q->left += q->count - n;
+ q->count = n;
+ }
+}
+
extern void queue_init(Queue *q);
extern void queue_init_buffer(Queue *q, Id *buf, int size);
extern void queue_init_clone(Queue *t, Queue *s);
extern void queue_insert(Queue *q, int pos, Id id);
extern void queue_insert2(Queue *q, int pos, Id id1, Id id2);
+extern void queue_insertn(Queue *q, int pos, int n, Id *elements);
extern void queue_delete(Queue *q, int pos);
extern void queue_delete2(Queue *q, int pos);
+extern void queue_deleten(Queue *q, int pos, int n);
+extern void queue_prealloc(Queue *q, int n);
+
+#ifdef __cplusplus
+}
+#endif
-#endif /* SATSOLVER_QUEUE_H */
+#endif /* LIBSOLV_QUEUE_H */