]> rtime.felk.cvut.cz Git - ulut.git/blobdiff - ulut/ul_hashtab.h
uLUt: more elaborated hash table sizing implemented.
[ulut.git] / ulut / ul_hashtab.h
index 7121fc6dcb605e78af319bad2937657bba37b236..95ac2b8d5930a7bcf05829e70187579989ab7d4b 100644 (file)
@@ -70,10 +70,27 @@ typedef struct ul_hashtab_cust_table_field {
   } treeroots;
   long count;
   ul_hashtab_hashval_t hashmask;
+  unsigned char sizestep;
 } ul_hashtab_cust_table_field_t;
 
 typedef int (ul_hashtab_resize_insert_fnc_t)(ul_hashtab_cust_table_field_t *table_field, gavl_node_t *treenode) UL_ATTR_REENTRANT;
 
+typedef struct ul_hashtab_sizestep {
+  ul_hashtab_hashval_t toshrink;
+  ul_hashtab_hashval_t toexpand;
+  ul_hashtab_hashval_t size;
+} ul_hashtab_sizestep_t;
+
+static inline int ul_hashtab_sizestep_max(const ul_hashtab_sizestep_t *steptab)
+{
+  return steptab[0].toshrink;
+}
+
+const ul_hashtab_sizestep_t *ul_hashtab_sizestep_global;
+const ul_hashtab_sizestep_t * const ul_hashtab_sizestep_default;
+
+#define ul_hashtab_sizestep_null ((ul_hashtab_sizestep_t *)0)
+
 void ul_hashtab_init_table_field_primitive(ul_hashtab_cust_table_field_t *table_field);
 int ul_hashtab_delete_all_primitive(ul_hashtab_cust_table_field_t *table_field);
 int ul_hashtab_resize_primitive(ul_hashtab_cust_table_field_t *table_field,