]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/dlist.h
Pool + label cleanups from bug reports
[bacula/bacula] / bacula / src / lib / dlist.h
index d6bd8e6590f88d0198c878ea075174f0433032a2..49403d966ca8dcddea7e9b5f1ecc8944c9dfe1d0 100644 (file)
@@ -42,7 +42,7 @@
 
 #ifdef the_old_way
 #define foreach_dlist(var, list) \
-       for((var)=NULL; (((void *)(var))=(list)->next(var)); )
+        for((var)=NULL; (((void *)(var))=(list)->next(var)); )
 #endif
 
 struct dlink {
@@ -54,19 +54,22 @@ struct dlink {
 class dlist {
    void *head;
    void *tail;
-   int loffset;
-   int num_items;
+   uint16_t loffset;
+   uint32_t num_items;
 public:
    dlist(void *item, void *link);
+   dlist(void);
+   ~dlist() { destroy(); }
    void init(void *item, void *link);
    void prepend(void *item);
    void append(void *item);
    void insert_before(void *item, void *where);
    void insert_after(void *item, void *where);
-   void *dlist::binary_insert(void *item, int compare(void *item1, void *item2));
+   void *unique_binary_insert(void *item, int compare(void *item1, void *item2));
+   void binary_insert(void *item, int compare(void *item1, void *item2));
    void remove(void *item);
    bool empty();
-   int size();
+   int  size();
    void *next(void *item);
    void *prev(void *item);
    void destroy();
@@ -76,7 +79,7 @@ public:
    void operator delete(void *);
 };
 
-/*                           
+/*                            
  * This allows us to do explicit initialization,
  *   allowing us to mix C++ classes inside malloc'ed
  *   C structures. Define before called in constructor.
@@ -94,6 +97,11 @@ inline dlist::dlist(void *item, void *link)
    this->init(item, link);
 }
 
+inline dlist::dlist(void)
+{
+   memset(this, 0, sizeof(dlist));
+}
+
 inline bool dlist::empty()
 {
    return head == NULL;