You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by am...@apache.org on 2017/02/26 00:04:17 UTC
[trafficserver] 01/01: PR #1209: Remove unused classes from Map.h
This is an automated email from the ASF dual-hosted git repository.
amc pushed a commit to branch amc-map-h-cleanup
in repository https://git-dual.apache.org/repos/asf/trafficserver.git
commit ed189a16d109dbad1dc143be51a396ef9fe20832
Author: Alan M. Carroll <so...@yahoo-inc.com>
AuthorDate: Mon Nov 7 15:20:47 2016 -0600
PR #1209: Remove unused classes from Map.h
---
lib/ts/Map.h | 538 -----------------------------------------------------
lib/ts/test_Map.cc | 50 -----
2 files changed, 588 deletions(-)
diff --git a/lib/ts/Map.h b/lib/ts/Map.h
index e142591..d4ade96 100644
--- a/lib/ts/Map.h
+++ b/lib/ts/Map.h
@@ -570,544 +570,6 @@ HashMap<K, AHashFns, C, A>::get_values(Vec<C> &values)
Map<K, C, A>::get_values(values);
}
-template <class C, class AHashFns, class A>
-C
-ChainHash<C, AHashFns, A>::put(C c)
-{
- uintptr_t h = AHashFns::hash(c);
- List<C, A> *l;
- MapElem<uintptr_t, List<C, A>> e(h, (C)0);
- MapElem<uintptr_t, List<C, A>> *x = this->set_in(e);
- if (x)
- l = &x->value;
- else {
- l = &Map<uintptr_t, List<C, A>, A>::put(h, c)->value;
- return l->head->car;
- }
- forc_List(ChainCons, x, *l) if (AHashFns::equal(c, x->car)) return x->car;
- l->push(c);
- return (C)0;
-}
-
-template <class C, class AHashFns, class A>
-C
-ChainHash<C, AHashFns, A>::get(C c)
-{
- uintptr_t h = AHashFns::hash(c);
- List<C> empty;
- MapElem<uintptr_t, List<C, A>> e(h, empty);
- MapElem<uintptr_t, List<C, A>> *x = this->set_in(e);
- if (!x)
- return 0;
- List<C> *l = &x->value;
- forc_List(ChainCons, x, *l) if (AHashFns::equal(c, x->car)) return x->car;
- return 0;
-}
-
-template <class C, class AHashFns, class A>
-C
-ChainHash<C, AHashFns, A>::put_bag(C c)
-{
- uintptr_t h = AHashFns::hash(c);
- List<C, A> *l;
- MapElem<uintptr_t, List<C, A>> e(h, (C)0);
- MapElem<uintptr_t, List<C, A>> *x = this->set_in(e);
- if (x)
- l = &x->value;
- else {
- l = &Map<uintptr_t, List<C, A>>::put(h, c)->value;
- return l->head->car;
- }
- l->push(c);
- return (C)0;
-}
-
-template <class C, class AHashFns, class A>
-int
-ChainHash<C, AHashFns, A>::get_bag(C c, Vec<C> &v)
-{
- uintptr_t h = AHashFns::hash(c);
- List<C, A> empty;
- MapElem<uintptr_t, List<C, A>> e(h, empty);
- MapElem<uintptr_t, List<C, A>> *x = this->set_in(e);
- if (!x)
- return 0;
- List<C, A> *l = &x->value;
- forc_List(C, x, *l) if (AHashFns::equal(c, x->car)) v.add(x->car);
- return v.n;
-}
-
-template <class C, class AHashFns, class A>
-void
-ChainHash<C, AHashFns, A>::get_elements(Vec<C> &elements)
-{
- for (int i = 0; i < n; i++) {
- List<C, A> *l = &v[i].value;
- forc_List(C, x, *l) elements.add(x);
- }
-}
-
-template <class C, class AHashFns, class A>
-int
-ChainHash<C, AHashFns, A>::del(C c)
-{
- uintptr_t h = AHashFns::hash(c);
- List<C> *l;
- MapElem<uintptr_t, List<C, A>> e(h, (C)0);
- MapElem<uintptr_t, List<C, A>> *x = this->set_in(e);
- if (x)
- l = &x->value;
- else
- return 0;
- ConsCell<C> *last = 0;
- forc_List(ConsCell<C>, x, *l)
- {
- if (AHashFns::equal(c, x->car)) {
- if (!last)
- l->head = x->cdr;
- else
- last->cdr = x->cdr;
- A::free(x);
- return 1;
- }
- last = x;
- }
- return 0;
-}
-
-template <class K, class AHashFns, class C, class A>
-MapElem<K, C> *
-ChainHashMap<K, AHashFns, C, A>::put(K akey, C avalue)
-{
- uintptr_t h = AHashFns::hash(akey);
- List<MapElem<K, C>, A> empty;
- List<MapElem<K, C>, A> *l;
- MapElem<K, C> c(akey, avalue);
- MapElem<uintptr_t, List<MapElem<K, C>, A>> e(h, empty);
- MapElem<uintptr_t, List<MapElem<K, C>, A>> *x = this->set_in(e);
- if (x)
- l = &x->value;
- else {
- l = &Map<uintptr_t, List<MapElem<K, C>, A>, A>::put(h, c)->value;
- return &l->head->car;
- }
- for (ConsCell<MapElem<K, C>, A> *p = l->head; p; p = p->cdr)
- if (AHashFns::equal(akey, p->car.key)) {
- p->car.value = avalue;
- return &p->car;
- }
- l->push(c);
- return 0;
-}
-
-template <class K, class AHashFns, class C, class A>
-C
-ChainHashMap<K, AHashFns, C, A>::get(K akey)
-{
- uintptr_t h = AHashFns::hash(akey);
- List<MapElem<K, C>, A> empty;
- MapElem<uintptr_t, List<MapElem<K, C>, A>> e(h, empty);
- MapElem<uintptr_t, List<MapElem<K, C>, A>> *x = this->set_in(e);
- if (!x)
- return 0;
- List<MapElem<K, C>, A> *l = &x->value;
- if (l->head)
- for (ConsCell<MapElem<K, C>, A> *p = l->head; p; p = p->cdr)
- if (AHashFns::equal(akey, p->car.key))
- return p->car.value;
- return 0;
-}
-
-template <class K, class AHashFns, class C, class A>
-MapElem<K, C> *
-ChainHashMap<K, AHashFns, C, A>::put_bag(K akey, C avalue)
-{
- uintptr_t h = AHashFns::hash(akey);
- List<MapElem<K, C>, A> empty;
- List<MapElem<K, C>, A> *l;
- MapElem<K, C> c(akey, avalue);
- MapElem<uintptr_t, List<MapElem<K, C>, A>> e(h, empty);
- MapElem<uintptr_t, List<MapElem<K, C>, A>> *x = this->set_in(e);
- if (x)
- l = &x->value;
- else {
- l = &Map<uintptr_t, List<MapElem<K, C>, A>, A>::put(h, c)->value;
- return &l->head->car;
- }
- for (ConsCell<MapElem<K, C>, A> *p = l->head; p; p = p->cdr)
- if (AHashFns::equal(akey, p->car.key) && AHashFns::equal_value(avalue, p->car.value))
- return &p->car;
- l->push(c);
- return 0;
-}
-
-template <class K, class AHashFns, class C, class A>
-int
-ChainHashMap<K, AHashFns, C, A>::get_bag(K akey, Vec<C> &v)
-{
- uintptr_t h = AHashFns::hash(akey);
- List<MapElem<K, C>, A> empty;
- MapElem<uintptr_t, List<MapElem<K, C>, A>> e(h, empty);
- MapElem<uintptr_t, List<MapElem<K, C>, A>> *x = this->set_in(e);
- if (!x)
- return 0;
- List<MapElem<K, C>, A> *l = &x->value;
- for (ConsCell<MapElem<K, C>, A> *p = l->head; p; p = p->cdr)
- if (AHashFns::equal(akey, p->car.key))
- return v.add(x->car);
- return v.n;
-}
-
-template <class K, class AHashFns, class C, class A>
-int
-ChainHashMap<K, AHashFns, C, A>::del(K akey)
-{
- uintptr_t h = AHashFns::hash(akey);
- List<MapElem<K, C>, A> empty;
- List<MapElem<K, C>, A> *l;
- MapElem<uintptr_t, List<MapElem<K, C>, A>> e(h, empty);
- MapElem<uintptr_t, List<MapElem<K, C>, A>> *x = this->set_in(e);
- if (x)
- l = &x->value;
- else
- return 0;
- ConsCell<MapElem<K, C>, A> *last = 0;
- for (ConsCell<MapElem<K, C>, A> *p = l->head; p; p = p->cdr) {
- if (AHashFns::equal(akey, p->car.key)) {
- if (!last)
- l->head = p->cdr;
- else
- last->cdr = p->cdr;
- return 1;
- }
- last = p;
- }
- return 0;
-}
-
-template <class K, class AHashFns, class C, class A>
-void
-ChainHashMap<K, AHashFns, C, A>::get_keys(Vec<K> &keys)
-{
- for (size_t i = 0; i < n; i++) {
- List<MapElem<K, C>> *l = &v[i].value;
- if (l->head)
- for (ConsCell<MapElem<K, C>, A> *p = l->head; p; p = p->cdr)
- keys.add(p->car.key);
- }
-}
-
-template <class K, class AHashFns, class C, class A>
-void
-ChainHashMap<K, AHashFns, C, A>::get_values(Vec<C> &values)
-{
- for (size_t i = 0; i < n; i++) {
- List<MapElem<K, C>, A> *l = &v[i].value;
- if (l->head)
- for (ConsCell<MapElem<K, C>, A> *p = l->head; p; p = p->cdr)
- values.add(p->car.value);
- }
-}
-
-template <class F, class A>
-inline cchar *
-StringChainHash<F, A>::canonicalize(cchar *s, cchar *e)
-{
- uintptr_t h = 0;
- cchar *a = s;
- // 31 changed to 27, to avoid prime2 in vec.cpp
- if (e)
- while (a != e)
- h = h * 27 + (unsigned char)*a++;
- else
- while (*a)
- h = h * 27 + (unsigned char)*a++;
- MapElem<uintptr_t, List<cchar *, A>> me(h, (char *)0);
- MapElem<uintptr_t, List<cchar *, A>> *x = this->set_in(me);
- if (x) {
- List<cchar *, A> *l = &x->value;
- typedef ConsCell<cchar *, A> TT;
- forc_List(TT, x, *l)
- {
- a = s;
- cchar *b = x->car;
- while (1) {
- if (!*b) {
- if (a == e)
- return x->car;
- break;
- }
- if (a >= e || *a != *b)
- break;
- a++;
- b++;
- }
- }
- }
- s = _dupstr<A>(s, e);
- cchar *ss = ChainHash<cchar *, F, A>::put(s);
- if (ss)
- return ss;
- return s;
-}
-
-template <class K, class C, class A>
-inline C
-Env<K, C, A>::get(K akey)
-{
- MapElem<K, List<C, A> *> e(akey, 0);
- MapElem<K, List<C, A> *> *x = store.set_in(e);
- if (x)
- return x->value->first();
- return (C)0;
-}
-
-template <class K, class C, class A>
-inline List<C, A> *
-Env<K, C, A>::get_bucket(K akey)
-{
- List<C, A> *bucket = store.get(akey);
- if (bucket)
- return bucket;
- bucket = new List<C>();
- store.put(akey, bucket);
- return bucket;
-}
-
-template <class K, class C, class A>
-inline void
-Env<K, C, A>::put(K akey, C avalue)
-{
- scope.head->car.push(akey);
- get_bucket(akey)->push(avalue);
-}
-
-template <class K, class C, class A>
-inline void
-Env<K, C, A>::push()
-{
- scope.push();
-}
-
-template <class K, class C, class A>
-inline void
-Env<K, C, A>::pop()
-{
- forc_List(EnvCons, e, scope.first()) get_bucket(e->car)->pop();
-}
-
-template <class C, class AHashFns, int N, class A> inline NBlockHash<C, AHashFns, N, A>::NBlockHash() : n(1), i(0)
-{
- memset(&e[0], 0, sizeof(e));
- v = e;
-}
-
-template <class C, class AHashFns, int N, class A>
-inline C *
-NBlockHash<C, AHashFns, N, A>::first()
-{
- return &v[0];
-}
-
-template <class C, class AHashFns, int N, class A>
-inline C *
-NBlockHash<C, AHashFns, N, A>::last()
-{
- return &v[n * N];
-}
-
-template <class C, class AHashFns, int N, class A>
-inline C
-NBlockHash<C, AHashFns, N, A>::put(C c)
-{
- int a;
- uintptr_t h = AHashFns::hash(c);
- C *x = &v[(h % n) * N];
- for (a = 0; a < N; a++) {
- if (!x[a])
- break;
- if (AHashFns::equal(c, x[a]))
- return x[a];
- }
- if (a < N) {
- x[a] = c;
- return (C)0;
- }
- C *vv = first(), *ve = last();
- C *old_v = v;
- i = i + 1;
- size(i);
- for (; vv < ve; vv++)
- if (*vv)
- put(*vv);
- if (old_v != &e[0])
- A::free(old_v);
- return put(c);
-}
-
-template <class C, class AHashFns, int N, class A>
-inline void
-NBlockHash<C, AHashFns, N, A>::size(int p2)
-{
- n = prime2[p2];
- v = (C *)A::alloc(n * sizeof(C) * N);
- memset(v, 0, n * sizeof(C) * N);
-}
-
-template <class C, class AHashFns, int N, class A>
-inline C
-NBlockHash<C, AHashFns, N, A>::get(C c)
-{
- if (!n)
- return (C)0;
- uintptr_t h = AHashFns::hash(c);
- C *x = &v[(h % n) * N];
- for (int a = 0; a < N; a++) {
- if (!x[a])
- return (C)0;
- if (AHashFns::equal(c, x[a]))
- return x[a];
- }
- return (C)0;
-}
-
-template <class C, class AHashFns, int N, class A>
-inline C *
-NBlockHash<C, AHashFns, N, A>::assoc_get(C *c)
-{
- if (!n)
- return (C *)0;
- uintptr_t h = AHashFns::hash(*c);
- C *x = &v[(h % n) * N];
- int a = 0;
- if (c >= x && c < x + N)
- a = c - x + 1;
- for (; a < N; a++) {
- if (!x[a])
- return (C *)0;
- if (AHashFns::equal(*c, x[a]))
- return &x[a];
- }
- return (C *)0;
-}
-
-template <class C, class AHashFns, int N, class A>
-inline C *
-NBlockHash<C, AHashFns, N, A>::assoc_put(C *c)
-{
- int a;
- uintptr_t h = AHashFns::hash(*c);
- C *x = &v[(h % n) * N];
- for (a = 0; a < N; a++) {
- if (!x[a])
- break;
- }
- if (a < N) {
- x[a] = *c;
- return &x[a];
- }
- x[i % N] = *c;
- i++;
- return &x[i % N];
-}
-
-template <class C, class AHashFns, int N, class A>
-inline int
-NBlockHash<C, AHashFns, N, A>::del(C c)
-{
- int a, b;
- if (!n)
- return 0;
- uintptr_t h = AHashFns::hash(c);
- C *x = &v[(h % n) * N];
- for (a = 0; a < N; a++) {
- if (!x[a])
- return 0;
- if (AHashFns::equal(c, x[a])) {
- if (a < N - 1) {
- for (b = a + 1; b < N; b++) {
- if (!x[b])
- break;
- }
- if (b != a + 1)
- x[a] = x[b - 1];
- x[b - 1] = (C)0;
- return 1;
- } else {
- x[N - 1] = (C)0;
- return 1;
- }
- }
- }
- return 0;
-}
-
-template <class C, class AHashFns, int N, class A>
-inline void
-NBlockHash<C, AHashFns, N, A>::clear()
-{
- if (v && v != e)
- A::free(v);
- v = e;
- n = 1;
-}
-
-template <class C, class AHashFns, int N, class A>
-inline void
-NBlockHash<C, AHashFns, N, A>::reset()
-{
- if (v)
- memset(v, 0, n * N * sizeof(C));
-}
-
-template <class C, class AHashFns, int N, class A>
-inline int
-NBlockHash<C, AHashFns, N, A>::count()
-{
- int nelements = 0;
- C *l = last();
- for (C *xx = first(); xx < l; xx++)
- if (*xx)
- nelements++;
- return nelements;
-}
-
-template <class C, class AHashFns, int N, class A>
-inline void
-NBlockHash<C, AHashFns, N, A>::copy(const NBlockHash<C, AHashFns, N, A> &hh)
-{
- clear();
- n = hh.n;
- i = hh.i;
- if (hh.v == &hh.e[0]) {
- memcpy(e, &hh.e[0], sizeof(e));
- v = e;
- } else {
- if (hh.v) {
- v = (C *)A::alloc(n * sizeof(C) * N);
- memcpy(v, hh.v, n * sizeof(C) * N);
- } else
- v = 0;
- }
-}
-
-template <class C, class AHashFns, int N, class A>
-inline void
-NBlockHash<C, AHashFns, N, A>::move(NBlockHash<C, AHashFns, N, A> &hh)
-{
- clear();
- n = hh.n;
- i = hh.i;
- v = hh.v;
- if (hh.v == &hh.e[0]) {
- memcpy(e, &hh.e[0], sizeof(e));
- v = e;
- }
- hh.clear();
-}
-
-void test_map();
-
/* ---------------------------------------------------------------------------------------------- */
/** A hash map usable by ATS core.
diff --git a/lib/ts/test_Map.cc b/lib/ts/test_Map.cc
index 4ec0713..0e36c07 100644
--- a/lib/ts/test_Map.cc
+++ b/lib/ts/test_Map.cc
@@ -145,28 +145,7 @@ main(int /* argc ATS_UNUSED */, char ** /*argv ATS_UNUSED */)
}
*/
- StringChainHash<> h;
cchar *hi = "hi", *ho = "ho", *hum = "hum", *hhi = "hhi";
- hhi++;
- h.put(hi);
- h.put(ho);
- ink_assert(h.put(hum) == hum);
- ink_assert(h.put(hhi) == hi);
- ink_assert(h.get(hhi) == hi && h.get(hi) == hi && h.get(ho) == ho);
- ink_assert(h.get("he") == nullptr && h.get("hee") == nullptr);
- h.del(ho);
- ink_assert(h.get(ho) == nullptr);
-
- StringBlockHash hh;
- hh.put(hi);
- hh.put(ho);
- ink_assert(hh.put(hum) == nullptr);
- ink_assert(hh.put(hhi) == hi);
- ink_assert(hh.get(hhi) == hi && hh.get(hi) == hi && hh.get(ho) == ho);
- ink_assert(hh.get("he") == nullptr && hh.get("hee") == nullptr);
- hh.del(hi);
- ink_assert(hh.get(hhi) == nullptr);
- ink_assert(hh.get(hi) == nullptr);
HashMap<cchar *, StringHashFns, int> sh;
sh.put(hi, 1);
@@ -188,35 +167,6 @@ main(int /* argc ATS_UNUSED */, char ** /*argv ATS_UNUSED */)
ink_assert(sh.get("af") == 10);
ink_assert(sh.get("ac") == 7);
- ChainHashMap<cchar *, StringHashFns, int> ssh;
- ssh.put(hi, 1);
- ssh.put(ho, 2);
- ssh.put(hum, 3);
- ssh.put(hhi, 4);
- ink_assert(ssh.get(hi) == 4);
- ink_assert(ssh.get(ho) == 2);
- ink_assert(ssh.get(hum) == 3);
- ssh.put("aa", 5);
- ssh.put("ab", 6);
- ssh.put("ac", 7);
- ssh.put("ad", 8);
- ssh.put("ae", 9);
- ssh.put("af", 10);
- ink_assert(ssh.get(hi) == 4);
- ink_assert(ssh.get(ho) == 2);
- ink_assert(ssh.get(hum) == 3);
- ink_assert(ssh.get("af") == 10);
- ink_assert(ssh.get("ac") == 7);
- ssh.del(ho);
- ink_assert(ssh.get(ho) == 0);
-
- Vec<int> ints;
- ssh.get_values(ints);
- ink_assert(ints.n == 8);
- Vec<cchar *> chars;
- ssh.get_keys(chars);
- ink_assert(chars.n == 8);
-
test_TSHashTable();
printf("test_Map PASSED\n");
--
To stop receiving notification emails like this one, please contact
"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>.