From c9e3ebd773cb63f584d02f6e72b85bf799773ee1 Mon Sep 17 00:00:00 2001 From: q66 Date: Sun, 14 Jun 2015 03:43:11 +0100 Subject: [PATCH] load factor management api --- octa/internal/hashtable.h | 12 +++++++----- octa/map.h | 2 ++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/octa/internal/hashtable.h b/octa/internal/hashtable.h index 424f560..5b22368 100644 --- a/octa/internal/hashtable.h +++ b/octa/internal/hashtable.h @@ -41,7 +41,6 @@ namespace detail { Chunk *p_chunks; Chain *p_unused; - using CPA = octa::AllocatorRebind; using CHA = octa::AllocatorRebind; @@ -52,6 +51,8 @@ namespace detail { DataPair p_data; + float p_maxlf; + const H &get_hash() const { return p_data.second().second().first(); } const C &get_eq() const { return p_data.second().second().second(); } @@ -60,7 +61,8 @@ namespace detail { Hashtable(octa::Size size, const H &hf, const C &eqf, const A &alloc): p_size(size), p_len(0), p_chunks(nullptr), p_unused(nullptr), - p_data(nullptr, FAPair(AllocPair(alloc, alloc), FuncPair(hf, eqf))) { + p_data(nullptr, FAPair(AllocPair(alloc, alloc), FuncPair(hf, eqf))), + p_maxlf(1.0f) { p_data.first() = octa::allocator_allocate(get_cpalloc(), size); memset(p_data.first(), 0, size * sizeof(Chain *)); } @@ -161,9 +163,9 @@ namespace detail { return (insert(h, key) = val); } - float load_factor() const { - return p_len / float(p_size); - } + float load_factor() const { return p_len / float(p_size); } + float max_load_factor() const { return p_maxlf; } + void max_load_factor(float lf) { p_maxlf = lf; } octa::Size bucket_count() const { return p_size; } octa::Size max_bucket_count() const { return Size(~0) / sizeof(Chain); } diff --git a/octa/map.h b/octa/map.h index 0424c4a..25f97f9 100644 --- a/octa/map.h +++ b/octa/map.h @@ -100,6 +100,8 @@ public: } float load_factor() const { return p_table.load_factor(); } + float max_load_factor() const { return p_table.max_load_factor(); } + void max_load_factor(float lf) { p_table.max_load_factor(lf); } void swap(Map &v) { octa::swap(p_table, v.p_table);