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:
authorMaxim Pimenov <m@maps.me>2016-05-27 19:40:55 +0300
committerMaxim Pimenov <m@maps.me>2016-05-31 14:54:46 +0300
commitf672cb0b8227ddafcd6b271724dda3e05df9bfef (patch)
tree423ac795cf5da4a96136416827e943040f19a1b5 /search/features_filter.hpp
parent59f40d7669598a229ffa4f6269e17234f9af9506 (diff)
[search] Got rid of the v2 directory and namespace.
Diffstat (limited to 'search/features_filter.hpp')
-rw-r--r--search/features_filter.hpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/search/features_filter.hpp b/search/features_filter.hpp
new file mode 100644
index 0000000000..fb5f425c3c
--- /dev/null
+++ b/search/features_filter.hpp
@@ -0,0 +1,59 @@
+#pragma once
+
+#include "std/unique_ptr.hpp"
+
+namespace coding
+{
+class CompressedBitVector;
+}
+
+namespace search
+{
+// A lightweight filter of features.
+//
+// NOTE: this class and its subclasses *ARE* thread-safe.
+class FeaturesFilter
+{
+public:
+ FeaturesFilter(coding::CompressedBitVector const & filter, uint32_t threshold);
+
+ virtual ~FeaturesFilter() = default;
+
+ bool NeedToFilter(coding::CompressedBitVector const & features) const;
+
+ virtual unique_ptr<coding::CompressedBitVector> Filter(
+ coding::CompressedBitVector const & cbv) const = 0;
+
+protected:
+ coding::CompressedBitVector const & m_filter;
+ uint32_t const m_threshold;
+};
+
+// Exact filter - leaves only features belonging to the set it was
+// constructed from.
+class LocalityFilter : public FeaturesFilter
+{
+public:
+ LocalityFilter(coding::CompressedBitVector const & filter);
+
+ // FeaturesFilter overrides:
+ unique_ptr<coding::CompressedBitVector> Filter(
+ coding::CompressedBitVector const & cbv) const override;
+};
+
+// Fuzzy filter - tries to leave only features belonging to the set it
+// was constructed from, but if the result is empty, leaves at most
+// first |threshold| features instead. This property is quite useful
+// when there are no matching features in viewport but it's ok to
+// process a limited number of features outside the viewport.
+class ViewportFilter : public FeaturesFilter
+{
+public:
+ ViewportFilter(coding::CompressedBitVector const & filter, uint32_t threshold);
+
+ // FeaturesFilter overrides:
+ unique_ptr<coding::CompressedBitVector> Filter(
+ coding::CompressedBitVector const & cbv) const override;
+};
+
+} // namespace search