fix getrpmruleinfos for linked packages
[platform/upstream/libsolv.git] / src / queue.h
index 4b3f9eb..4785e67 100644 (file)
@@ -7,14 +7,18 @@
 
 /*
  * 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 */
@@ -23,7 +27,8 @@ typedef struct _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
@@ -60,19 +65,10 @@ queue_pop(Queue *q)
 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
@@ -101,9 +97,31 @@ queue_push2(Queue *q, Id id1, Id id2)
   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_free(Queue *q);
 
-#endif /* SATSOLVER_QUEUE_H */
+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 /* LIBSOLV_QUEUE_H */