diff options
author | Yuri Gorshenin <y@maps.me> | 2016-06-23 11:59:28 +0300 |
---|---|---|
committer | Yuri Gorshenin <y@maps.me> | 2016-07-01 17:52:01 +0300 |
commit | 36fe4a08508b790a16677465e2e0ed5db70f0414 (patch) | |
tree | 68309693a2d80f27923645f8cefe76b99a3ea82d /coding | |
parent | cd6395349a25803dfbee006001eea5939ec15ec9 (diff) |
[search] Implemented Oracle.
Diffstat (limited to 'coding')
-rw-r--r-- | coding/compressed_bit_vector.hpp | 63 |
1 files changed, 39 insertions, 24 deletions
diff --git a/coding/compressed_bit_vector.hpp b/coding/compressed_bit_vector.hpp index 7e51b363aa..5fcf630919 100644 --- a/coding/compressed_bit_vector.hpp +++ b/coding/compressed_bit_vector.hpp @@ -198,18 +198,18 @@ public: static_cast<CompressedBitVector::StorageStrategy>(header); switch (strat) { - case CompressedBitVector::StorageStrategy::Dense: - { - vector<uint64_t> bitGroups; - rw::ReadVectorOfPOD(src, bitGroups); - return DenseCBV::BuildFromBitGroups(move(bitGroups)); - } - case CompressedBitVector::StorageStrategy::Sparse: - { - vector<uint64_t> setBits; - rw::ReadVectorOfPOD(src, setBits); - return make_unique<SparseCBV>(move(setBits)); - } + case CompressedBitVector::StorageStrategy::Dense: + { + vector<uint64_t> bitGroups; + rw::ReadVectorOfPOD(src, bitGroups); + return DenseCBV::BuildFromBitGroups(move(bitGroups)); + } + case CompressedBitVector::StorageStrategy::Sparse: + { + vector<uint64_t> setBits; + rw::ReadVectorOfPOD(src, setBits); + return make_unique<SparseCBV>(move(setBits)); + } } return unique_ptr<CompressedBitVector>(); } @@ -227,19 +227,34 @@ public: CompressedBitVector::StorageStrategy strat = cbv.GetStorageStrategy(); switch (strat) { - case CompressedBitVector::StorageStrategy::Dense: - { - DenseCBV const & denseCBV = static_cast<DenseCBV const &>(cbv); - denseCBV.ForEach(f); - return; - } - case CompressedBitVector::StorageStrategy::Sparse: - { - SparseCBV const & sparseCBV = static_cast<SparseCBV const &>(cbv); - sparseCBV.ForEach(f); - return; - } + case CompressedBitVector::StorageStrategy::Dense: + { + DenseCBV const & denseCBV = static_cast<DenseCBV const &>(cbv); + denseCBV.ForEach(f); + return; + } + case CompressedBitVector::StorageStrategy::Sparse: + { + SparseCBV const & sparseCBV = static_cast<SparseCBV const &>(cbv); + sparseCBV.ForEach(f); + return; + } } } }; + +class CompressedBitVectorHasher +{ +public: + static uint64_t Hash(CompressedBitVector const & cbv) + { + uint64_t const kBase = 127; + uint64_t hash = 0; + CompressedBitVectorEnumerator::ForEach(cbv, [&](uint64_t i) + { + hash = hash * kBase + i; + }); + return hash; + } +}; } // namespace coding |