diff src/structs.h @ 119:e8f07016e34d

updated for version 7.0042
author vimboss
date Wed, 19 Jan 2005 22:18:32 +0000
parents e918d3e340a4
children f67f8a8d81ba
line wrap: on
line diff
--- a/src/structs.h
+++ b/src/structs.h
@@ -1929,3 +1929,38 @@ typedef struct
 } prt_settings_T;
 
 #define PRINT_NUMBER_WIDTH 8
+
+/* Item for a hashtable.  "hi_key" can be one of three values:
+ * NULL:	   Never been used
+ * HI_KEY_REMOVED: Entry was removed
+ * Otherwise:	   Used item, pointer to the actual key; this usually is
+ *		   inside the item, subtract an offset to locate the item.
+ *		   This reduces the size of hashitem by 1/3.
+ */
+typedef struct hashitem_S
+{
+    long_u	hi_hash;	/* cached hash number of hi_key */
+    char_u	*hi_key;
+} hashitem;
+
+/* The address of "hash_removed" is used as a magic number for hi_key to
+ * indicate a removed item. */
+#define HI_KEY_REMOVED &hash_removed
+#define HASHITEM_EMPTY(hi) ((hi)->hi_key == NULL || (hi)->hi_key == &hash_removed)
+
+/* Initial size for a hashtable.  Our items are relatively small and growing
+ * is expensive, thus use 16 as a start.  Must be a power of 2. */
+#define HT_INIT_SIZE 16
+
+typedef struct hashtable_S
+{
+    long_u	ht_mask;	/* mask used for hash value (nr of items in
+				 * array is "ht_mask" + 1) */
+    int		ht_used;	/* number of items used */
+    int		ht_filled;	/* number of items used + removed */
+    int		ht_error;	/* when set growing failed, can't add more
+				   items before growing works */
+    hashitem	*ht_array;	/* points to the array, allocated when it's
+				   not "ht_smallarray" */
+    hashitem	ht_smallarray[HT_INIT_SIZE];   /* initial array */
+} hashtable;