// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once #include #include #include namespace proton { namespace matching { class Matcher; class QueryLimiter; } class Matchers { private: using Map = vespalib::hash_map>; Map _rpmap; const search::fef::RankingAssetsRepo _ranking_assets_repo; std::shared_ptr _fallback; std::shared_ptr _default; public: using SP = std::shared_ptr; Matchers(const std::atomic & now_ref, matching::QueryLimiter &queryLimiter, const search::fef::RankingAssetsRepo &rankingAssetsRepo); Matchers(const Matchers &) = delete; Matchers & operator =(const Matchers &) = delete; ~Matchers(); void add(const vespalib::string &name, std::shared_ptr matcher); matching::MatchingStats getStats() const; matching::MatchingStats getStats(const vespalib::string &name) const; std::shared_ptr lookup(const vespalib::string &name) const; const search::fef::RankingAssetsRepo& get_ranking_assets_repo() const noexcept { return _ranking_assets_repo; } }; } // namespace proton