diff options
author | Maxim Pimenov <m@maps.me> | 2016-05-27 19:40:55 +0300 |
---|---|---|
committer | Maxim Pimenov <m@maps.me> | 2016-05-31 14:54:46 +0300 |
commit | f672cb0b8227ddafcd6b271724dda3e05df9bfef (patch) | |
tree | 423ac795cf5da4a96136416827e943040f19a1b5 /search/features_filter.hpp | |
parent | 59f40d7669598a229ffa4f6269e17234f9af9506 (diff) |
[search] Got rid of the v2 directory and namespace.
Diffstat (limited to 'search/features_filter.hpp')
-rw-r--r-- | search/features_filter.hpp | 59 |
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 |