From cee5d4acab43807697307b1aa2aa885f843ac542 Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Wed, 9 Jun 2004 12:18:02 +0000 Subject: Unset function on PropSet. --- src/PropSet.cxx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src') diff --git a/src/PropSet.cxx b/src/PropSet.cxx index bf345145f..6c7145f02 100644 --- a/src/PropSet.cxx +++ b/src/PropSet.cxx @@ -383,6 +383,33 @@ void PropSet::Set(const char *keyVal) { } } +void PropSet::Unset(const char *key, int lenKey) { + if (!*key) // Empty keys are not supported + return; + if (lenKey == -1) + lenKey = static_cast(strlen(key)); + unsigned int hash = HashString(key, lenKey); + Property *pPrev = NULL; + for (Property *p = props[hash % hashRoots]; p; p = p->next) { + if ((hash == p->hash) && + ((strlen(p->key) == static_cast(lenKey)) && + (0 == strncmp(p->key, key, lenKey)))) { + if (pPrev) + pPrev->next = p->next; + else + props[hash % hashRoots] = p->next; + if (p == enumnext) + enumnext = p->next; // Not that anyone should mix enum and Set / Unset. + delete [](p->key); + delete [](p->val); + delete p; + return; + } else { + pPrev = p; + } + } +} + void PropSet::SetMultiple(const char *s) { const char *eol = strchr(s, '\n'); while (eol) { -- cgit v1.2.3