/proc/self/cwd/source/common/matcher/exact_map_matcher.h
Line | Count | Source |
1 | | #pragma once |
2 | | |
3 | | #include "source/common/matcher/map_matcher.h" |
4 | | |
5 | | namespace Envoy { |
6 | | namespace Matcher { |
7 | | |
8 | | /** |
9 | | * Implementation of a `sublinear` match tree that provides O(1) lookup of exact values, |
10 | | * with one OnMatch per result. |
11 | | */ |
12 | | template <class DataType> class ExactMapMatcher : public MapMatcher<DataType> { |
13 | | public: |
14 | | ExactMapMatcher(DataInputPtr<DataType>&& data_input, |
15 | | absl::optional<OnMatch<DataType>> on_no_match) |
16 | 5.06k | : MapMatcher<DataType>(std::move(data_input), std::move(on_no_match)) {} Envoy::Matcher::ExactMapMatcher<Envoy::Http::HttpMatchingData>::ExactMapMatcher(std::__1::unique_ptr<Envoy::Matcher::DataInput<Envoy::Http::HttpMatchingData>, std::__1::default_delete<Envoy::Matcher::DataInput<Envoy::Http::HttpMatchingData> > >&&, std::__1::optional<Envoy::Matcher::OnMatch<Envoy::Http::HttpMatchingData> >) Line | Count | Source | 16 | 5.06k | : MapMatcher<DataType>(std::move(data_input), std::move(on_no_match)) {} |
Unexecuted instantiation: Envoy::Matcher::ExactMapMatcher<Envoy::Network::MatchingData>::ExactMapMatcher(std::__1::unique_ptr<Envoy::Matcher::DataInput<Envoy::Network::MatchingData>, std::__1::default_delete<Envoy::Matcher::DataInput<Envoy::Network::MatchingData> > >&&, std::__1::optional<Envoy::Matcher::OnMatch<Envoy::Network::MatchingData> >) Unexecuted instantiation: Envoy::Matcher::ExactMapMatcher<Envoy::Network::UdpMatchingData>::ExactMapMatcher(std::__1::unique_ptr<Envoy::Matcher::DataInput<Envoy::Network::UdpMatchingData>, std::__1::default_delete<Envoy::Matcher::DataInput<Envoy::Network::UdpMatchingData> > >&&, std::__1::optional<Envoy::Matcher::OnMatch<Envoy::Network::UdpMatchingData> >) |
17 | | |
18 | 27.6k | void addChild(std::string value, OnMatch<DataType>&& on_match) override { |
19 | 27.6k | const auto itr_and_exists = children_.emplace(value, std::move(on_match)); |
20 | 27.6k | ASSERT(itr_and_exists.second); |
21 | 27.6k | } Envoy::Matcher::ExactMapMatcher<Envoy::Http::HttpMatchingData>::addChild(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Envoy::Matcher::OnMatch<Envoy::Http::HttpMatchingData>&&) Line | Count | Source | 18 | 27.6k | void addChild(std::string value, OnMatch<DataType>&& on_match) override { | 19 | 27.6k | const auto itr_and_exists = children_.emplace(value, std::move(on_match)); | 20 | 27.6k | ASSERT(itr_and_exists.second); | 21 | 27.6k | } |
Unexecuted instantiation: Envoy::Matcher::ExactMapMatcher<Envoy::Network::MatchingData>::addChild(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Envoy::Matcher::OnMatch<Envoy::Network::MatchingData>&&) Unexecuted instantiation: Envoy::Matcher::ExactMapMatcher<Envoy::Network::UdpMatchingData>::addChild(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Envoy::Matcher::OnMatch<Envoy::Network::UdpMatchingData>&&) |
22 | | |
23 | | protected: |
24 | 149 | absl::optional<OnMatch<DataType>> doMatch(const std::string& data) override { |
25 | 149 | const auto itr = children_.find(data); |
26 | 149 | if (itr != children_.end()) { |
27 | 36 | return itr->second; |
28 | 36 | } |
29 | | |
30 | 113 | return absl::nullopt; |
31 | 149 | } Envoy::Matcher::ExactMapMatcher<Envoy::Http::HttpMatchingData>::doMatch(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) Line | Count | Source | 24 | 149 | absl::optional<OnMatch<DataType>> doMatch(const std::string& data) override { | 25 | 149 | const auto itr = children_.find(data); | 26 | 149 | if (itr != children_.end()) { | 27 | 36 | return itr->second; | 28 | 36 | } | 29 | | | 30 | 113 | return absl::nullopt; | 31 | 149 | } |
Unexecuted instantiation: Envoy::Matcher::ExactMapMatcher<Envoy::Network::MatchingData>::doMatch(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) Unexecuted instantiation: Envoy::Matcher::ExactMapMatcher<Envoy::Network::UdpMatchingData>::doMatch(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) |
32 | | |
33 | | private: |
34 | | absl::flat_hash_map<std::string, OnMatch<DataType>> children_; |
35 | | }; |
36 | | } // namespace Matcher |
37 | | } // namespace Envoy |