diff options
Diffstat (limited to 'gst/goom/goomsl_hash.c')
-rw-r--r-- | gst/goom/goomsl_hash.c | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/gst/goom/goomsl_hash.c b/gst/goom/goomsl_hash.c deleted file mode 100644 index 3ce38a72..00000000 --- a/gst/goom/goomsl_hash.c +++ /dev/null @@ -1,153 +0,0 @@ -#include "goomsl_hash.h" -#include <string.h> -#include <stdlib.h> - -static GoomHashEntry * -entry_new (const char *key, HashValue value) -{ - - int len = strlen (key); - GoomHashEntry *entry = (GoomHashEntry *) malloc (sizeof (GoomHashEntry)); - - entry->key = (char *) malloc (len + 1); - memcpy (entry->key, key, len + 1); - entry->value = value; - entry->lower = NULL; - entry->upper = NULL; - - return entry; -} - -static void -entry_free (GoomHashEntry * entry) -{ - if (entry != NULL) { - entry_free (entry->lower); - entry_free (entry->upper); - free (entry->key); - free (entry); - } -} - -static void -entry_put (GoomHashEntry * entry, const char *key, HashValue value) -{ - int cmp = strcmp (key, entry->key); - - if (cmp == 0) { - entry->value = value; - } else if (cmp > 0) { - if (entry->upper == NULL) - entry->upper = entry_new (key, value); - else - entry_put (entry->upper, key, value); - } else { - if (entry->lower == NULL) - entry->lower = entry_new (key, value); - else - entry_put (entry->lower, key, value); - } -} - -static HashValue * -entry_get (GoomHashEntry * entry, const char *key) -{ - - int cmp; - - if (entry == NULL) - return NULL; - cmp = strcmp (key, entry->key); - if (cmp > 0) - return entry_get (entry->upper, key); - else if (cmp < 0) - return entry_get (entry->lower, key); - else - return &(entry->value); -} - -GoomHash * -goom_hash_new () -{ - GoomHash *_this = (GoomHash *) malloc (sizeof (GoomHash)); - - _this->root = NULL; - _this->number_of_puts = 0; - return _this; -} - -void -goom_hash_free (GoomHash * _this) -{ - entry_free (_this->root); - free (_this); -} - -void -goom_hash_put (GoomHash * _this, const char *key, HashValue value) -{ - _this->number_of_puts += 1; - if (_this->root == NULL) - _this->root = entry_new (key, value); - else - entry_put (_this->root, key, value); -} - -HashValue * -goom_hash_get (GoomHash * _this, const char *key) -{ - if (_this == NULL) - return NULL; - return entry_get (_this->root, key); -} - -void -goom_hash_put_int (GoomHash * _this, const char *key, int i) -{ - HashValue value; - - value.i = i; - goom_hash_put (_this, key, value); -} - -void -goom_hash_put_float (GoomHash * _this, const char *key, float f) -{ - HashValue value; - - value.f = f; - goom_hash_put (_this, key, value); -} - -void -goom_hash_put_ptr (GoomHash * _this, const char *key, void *ptr) -{ - HashValue value; - - value.ptr = ptr; - goom_hash_put (_this, key, value); -} - -/* FOR EACH */ - -static void -_goom_hash_for_each (GoomHash * _this, GoomHashEntry * entry, GH_Func func) -{ - if (entry == NULL) - return; - func (_this, entry->key, &(entry->value)); - _goom_hash_for_each (_this, entry->lower, func); - _goom_hash_for_each (_this, entry->upper, func); -} - -void -goom_hash_for_each (GoomHash * _this, GH_Func func) -{ - _goom_hash_for_each (_this, _this->root, func); -} - -int -goom_hash_number_of_puts (GoomHash * _this) -{ - return _this->number_of_puts; -} |