From 61b07bd399f1cde021f4b9600b7fb10433933c0e Mon Sep 17 00:00:00 2001 From: Jim Apple Date: Fri, 15 Jun 2018 14:06:23 -0700 Subject: [PATCH] Restrict table bits_per_tag at compile time Previously this would fail silently at run time. This closes #34. --- src/packedtable.h | 4 ++++ src/singletable.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/packedtable.h b/src/packedtable.h index 5b84473..cda2d9b 100644 --- a/src/packedtable.h +++ b/src/packedtable.h @@ -13,6 +13,10 @@ namespace cuckoofilter { // Using Permutation encoding to save 1 bit per tag template class PackedTable { + static_assert(bits_per_tag == 5 || bits_per_tag == 6 || bits_per_tag == 7 || + bits_per_tag == 8 || bits_per_tag == 9 || + bits_per_tag == 13 || bits_per_tag == 17, + "bits_per_tag must be 5, 6, 7, 8, 9, 13, or 17"); static const size_t kDirBitsPerTag = bits_per_tag - 4; static const size_t kBitsPerBucket = (3 + kDirBitsPerTag) * 4; static const size_t kBytesPerBucket = (kBitsPerBucket + 7) >> 3; diff --git a/src/singletable.h b/src/singletable.h index 8fd40b3..e745423 100644 --- a/src/singletable.h +++ b/src/singletable.h @@ -14,6 +14,10 @@ namespace cuckoofilter { // the most naive table implementation: one huge bit array template class SingleTable { + static_assert(bits_per_tag == 2 || bits_per_tag == 4 || bits_per_tag == 8 || + bits_per_tag == 12 || bits_per_tag == 16 || + bits_per_tag == 32, + "bits_per_tag must be 2, 4, 8, 12, 16, or 32"); static const size_t kTagsPerBucket = 4; static const size_t kBytesPerBucket = (bits_per_tag * kTagsPerBucket + 7) >> 3;