Coverage Report

Created: 2023-11-12 09:30

/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