PIC port on going development.most of addition, arrays, pointers,
[fw/sdcc] / src / SDCChasht.h
index cd00908e46572e29a154c79119fa6d03ae98a7b7..344cab94500d58b352e7ecddec62a81f71c1056b 100644 (file)
 #ifndef SDCCHASHT_H
 #define SDCCHASHT_H
 
-#ifdef _NO_GC
-
-#include <stdlib.h>
-#define GC_malloc malloc
-#define GC_free free
-#define GC_realloc realloc
-#define GC_malloc_atomic malloc
-
-#else
-
-#include "./gc/gc.h" 
-
-#endif
-
-#ifndef ALLOC
-
-#define  ALLOC(x,sz) if (!(x = GC_malloc(sz)))                          \
-         {                                                           \
-            fprintf(stderr,"out of virtual memory %s , %d",__FILE__,__LINE__);\
-            exit (1);                                                \
-         }
-
-#define  ALLOC_ATOMIC(x,sz) if (!(x = GC_malloc_atomic(sz)))                          \
-         {                                                           \
-            fprintf(stderr,"out of virtual memory %s , %d",__FILE__,__LINE__);\
-            exit (1);                                                \
-         }
-
-
-
-#endif
+#include  "SDCCalloc.h"
 
 
 /* hashtable item */
 typedef struct hashtItem
 {
-    int key ;
-    void *item ;
+    int key;
+    /* Pointer to the key that was hashed for key.
+       Used for a hash table with unique keys. */
+    void *pkey;
+    void *item;
     struct hashtItem *next ;
 } hashtItem ;
 
@@ -79,11 +52,10 @@ typedef struct hTab
     int nItems ;
 } hTab ;
 
-
-
-enum {
+typedef enum {
     DELETE_CHAIN = 1,
-    DELETE_ITEM };
+    DELETE_ITEM 
+} DELETE_ACTION;
 
 
 /*-----------------------------------------------------------------*/
@@ -92,10 +64,32 @@ enum {
 
 /* hashtable related functions */
 hTab        *newHashTable      (int);
-void         hTabAddItem (hTab **, int , void * );
-void         hTabDeleteItem (hTab **, int  ,
-                                 void *, int  ,
-                                 int (*compareFunc)(void *,void *));
+void         hTabAddItem (hTab **, int key, void *item);
+/** Adds a new item to the hash table.
+    @param h           The hash table to add to
+    @param key         A hashed version of pkey
+    @param pkey                A copy of the key.  Owned by the
+                       hash table after this function.
+    @param item                Value for this key.
+*/
+void        hTabAddItemLong(hTab **h, int key, void *pkey, void *item);
+/** Finds a item by exact key.
+    Searches all items in the key 'key' for a key that
+    according to 'compare' matches pkey.
+    @param h           The hash table to search
+    @param key         A hashed version of pkey.
+    @param pkey                The key to search for
+    @param compare     Returns 0 if pkey == this
+*/
+void *      hTabFindByKey(hTab *h, int key, const void *pkey, int (*compare)(const void *, const void *));
+/** Deletes an item with the exact key 'pkey'
+    @see hTabFindByKey
+*/
+int         hTabDeleteByKey(hTab **h, int key, const void *pkey, int (*compare)(const void *, const void *));
+
+void         hTabDeleteItem (hTab **, int key,
+                            const void *item, DELETE_ACTION action,
+                            int (*compareFunc)(const void *,const void *));
 int          hTabIsInTable (hTab *, int , void * , 
                                 int (*compareFunc)(void *,void *));
 void         *hTabFirstItem (hTab *, int *);
@@ -110,5 +104,14 @@ void        *hTabFirstItemWK (hTab *htab, int wk);
 void        *hTabNextItemWK (hTab *htab );
 void         hTabClearAll (hTab *htab);
 
+/** Find the first item that either is 'item' or which
+    according to 'compareFunc' is the same as item.
+    @param compareFunc         strcmp like compare function, may be null.
+*/
+void *hTabFindItem(hTab *htab, int key, 
+                  void *item, int (*compareFunc)(void *,void *));
+
+void shash_add(hTab **h, const char *szKey, const char *szValue);
+const char *shash_find(hTab *h, const char *szKey);
 
 #endif