Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/coding
diff options
context:
space:
mode:
authorYuri Gorshenin <y@maps.me>2016-06-23 11:59:28 +0300
committerYuri Gorshenin <y@maps.me>2016-07-01 17:52:01 +0300
commit36fe4a08508b790a16677465e2e0ed5db70f0414 (patch)
tree68309693a2d80f27923645f8cefe76b99a3ea82d /coding
parentcd6395349a25803dfbee006001eea5939ec15ec9 (diff)
[search] Implemented Oracle.
Diffstat (limited to 'coding')
-rw-r--r--coding/compressed_bit_vector.hpp63
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