]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Add ptable_delete to ptable.h
authorVincent Pit <vince@profvince.com>
Thu, 28 Oct 2010 22:18:08 +0000 (00:18 +0200)
committerVincent Pit <vince@profvince.com>
Thu, 28 Oct 2010 22:18:08 +0000 (00:18 +0200)
ptable.h

index b3d19e23416f16b6941f24753ed5c81f3bec41b1..055f0a5cd008d2471c620c8321996e023e118a7a 100644 (file)
--- a/ptable.h
+++ b/ptable.h
@@ -176,6 +176,27 @@ STATIC void PTABLE_PREFIX(_store)(pPTBL_ ptable * const t, const void * const ke
  }
 }
 
+STATIC void PTABLE_PREFIX(_delete)(pPTBL_ ptable * const t, const void * const key) {
+ ptable_ent *prev, *ent;
+ const size_t i = PTABLE_HASH(key) & t->max;
+
+ prev = NULL;
+ ent  = t->ary[i];
+ for (; ent; prev = ent, ent = ent->next) {
+  if (ent->key == key)
+   break;
+ }
+
+ if (ent) {
+  if (prev)
+   prev->next = ent->next;
+  else
+   t->ary[i]  = ent->next;
+  PTABLE_VAL_FREE(ent->val);
+  PerlMemShared_free(ent);
+ }
+}
+
 #ifndef ptable_walk
 STATIC void ptable_walk(pTHX_ ptable * const t, void (*cb)(pTHX_ ptable_ent *ent, void *userdata), void *userdata) {
 #define ptable_walk(T, CB, UD) ptable_walk(aTHX_ (T), (CB), (UD))