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 */
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 */
};
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(); }
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
};