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
diff options
context:
space:
mode:
Diffstat (limited to 'search/features_filter.cpp')
-rw-r--r--search/features_filter.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/search/features_filter.cpp b/search/features_filter.cpp
new file mode 100644
index 0000000000..0f9912ad07
--- /dev/null
+++ b/search/features_filter.cpp
@@ -0,0 +1,47 @@
+#include "search/features_filter.hpp"
+
+#include "coding/compressed_bit_vector.hpp"
+
+#include "std/algorithm.hpp"
+
+namespace search
+{
+// FeaturesFilter ----------------------------------------------------------------------------------
+FeaturesFilter::FeaturesFilter(coding::CompressedBitVector const & filter, uint32_t threshold)
+ : m_filter(filter), m_threshold(threshold)
+{
+}
+
+bool FeaturesFilter::NeedToFilter(coding::CompressedBitVector const & cbv) const
+{
+ return cbv.PopCount() > m_threshold;
+}
+
+// LocalityFilter ----------------------------------------------------------------------------------
+LocalityFilter::LocalityFilter(coding::CompressedBitVector const & filter)
+ : FeaturesFilter(filter, 0 /* threshold */)
+{
+}
+
+unique_ptr<coding::CompressedBitVector> LocalityFilter::Filter(
+ coding::CompressedBitVector const & cbv) const
+{
+ return coding::CompressedBitVector::Intersect(m_filter, cbv);
+}
+
+// ViewportFilter ----------------------------------------------------------------------------------
+ViewportFilter::ViewportFilter(coding::CompressedBitVector const & filter, uint32_t threshold)
+ : FeaturesFilter(filter, threshold)
+{
+}
+
+unique_ptr<coding::CompressedBitVector> ViewportFilter::Filter(
+ coding::CompressedBitVector const & cbv) const
+{
+ auto result = coding::CompressedBitVector::Intersect(m_filter, cbv);
+ if (!coding::CompressedBitVector::IsEmpty(result))
+ return result;
+ return cbv.LeaveFirstSetNBits(m_threshold);
+}
+
+} // namespace search