]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/htable.h
kes Apply Marco van Wieringen's set of patches, cleans up Migration/Copy
[bacula/bacula] / bacula / src / lib / htable.h
index 4e08eb65ebffb381e98fc044865fbf65dfab66de..1341a7a2ce497cb5c8d9bf12755766b761e1af9e 100644 (file)
@@ -20,7 +20,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Bacula® is a registered trademark of John Walker.
+   Bacula® is a registered trademark of Kern Sibbald.
    The licensor of Bacula is the Free Software Foundation Europe
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 
 /* 
  * BIG_MALLOC is to provide a large malloc service to htable
- *   not yet implemented, and not yet working.
  */
-//#define BIG_MALLOC
+#define BIG_MALLOC
 
 /*
  * Loop var through each member of table
  */
+#ifdef HAVE_TYPEOF
+#define foreach_htable(var, tbl) \
+        for((var)=(typeof(var))((tbl)->first()); \
+           (var); \
+           (var)=(typeof(var))((tbl)->next()))
+#else
 #define foreach_htable(var, tbl) \
         for((*((void **)&(var))=(void *)((tbl)->first())); \
             (var); \
             (*((void **)&(var))=(void *)((tbl)->next())))
+#endif
+
+
 
 struct hlink {
    void *next;                        /* next hash item */
@@ -60,7 +68,7 @@ struct hlink {
 
 struct h_mem {
    struct h_mem *next;                /* next buffer */
-   int rem;                           /* remaining bytes */
+   int32_t rem;                       /* remaining bytes in big_buffer */
    char *mem;                         /* memory pointer */
    char first[1];                     /* first byte */
 };
@@ -80,11 +88,12 @@ class htable : public SMARTALLOC {
    uint32_t total_size;               /* total bytes malloced */
    uint32_t blocks;                   /* blocks malloced */
 #ifdef BIG_MALLOC
-   struct h_mem *mem;                 /* malloced memory blocks */
-   void malloc_buf(int size);         /* Get a bit buffer */
+   struct h_mem *mem_block;           /* malloc'ed memory block chain */
+   void malloc_big_buf(int size);     /* Get a big buffer */
 #endif
    void hash_index(char *key);        /* produce hash key,index */
    void grow_table();                 /* grow the table */
+
 public:
    htable(void *item, void *link, int tsize = 31);
    ~htable() { destroy(); }
@@ -96,8 +105,8 @@ public:
    void destroy();
    void stats();                      /* print stats about the table */
    uint32_t size();                   /* return size of table */
+   char *hash_malloc(int size);       /* malloc bytes for a hash entry */
 #ifdef BIG_MALLOC
-   char *hash_alloc(int size);        /* malloc bytes for a hash entry */
-   void hash_free();                  /* free all hash allocated bytes */
+   void hash_big_free();              /* free all hash allocated big buffers */
 #endif
 };