ValidatorFactory.h
Go to the documentation of this file.
1 #pragma once
3 
4 #include <functional>
5 #include <regex>
6 
8 
9 namespace lanelet {
10 namespace validation {
11 
12 using Regexes = std::vector<std::regex>;
13 
14 template <typename ValidatorT>
15 using ValidatorWithName = std::pair<std::string, std::unique_ptr<ValidatorT>>;
16 
17 template <typename ValidatorT>
18 using ValidatorsWithName = std::vector<ValidatorWithName<ValidatorT>>;
19 
21  public:
22  template <typename ValidatorT>
23  using CreationFcn = std::function<ValidatorT*()>;
24  static ValidatorFactory& instance();
25 
29 
34  std::vector<std::string> availableValidators(const Regexes& regexes = {});
35 
36  template <typename ValidatorT>
37  friend class RegisterMapValidator;
38 
39  template <typename ValidatorT>
41 
42  template <typename ValidatorT>
44 
45  private:
46  void registerMapValidator(const std::string& name, const CreationFcn<MapValidator>& creator);
47  void registerTrafficRuleValidator(const std::string& name, const CreationFcn<TrafficRuleValidator>& creator);
48  void registerRoutingGraphValidator(const std::string& name, const CreationFcn<RoutingGraphValidator>& creator);
49 
50  ValidatorFactory() = default;
51  std::map<std::string, CreationFcn<MapValidator>> mapValidatorRegistry_;
52  std::map<std::string, CreationFcn<TrafficRuleValidator>> trafficRuleValidatorRegistry_;
53  std::map<std::string, CreationFcn<RoutingGraphValidator>> routingGraphValidatorRegistry_;
54 };
55 
61 template <class T>
63  public:
65  static_assert(!utils::strequal(T::name(), ""), "You did not overload the name() function!");
66  ValidatorFactory::instance().registerMapValidator(T::name(), []() { return new T(); });
67  }
68 };
69 
71 template <class T>
73  public:
75  static_assert(!utils::strequal(T::name(), ""), "You did not overload the name() function!");
76  ValidatorFactory::instance().registerTrafficRuleValidator(T::name(), []() { return new T(); });
77  }
78 };
79 
81 template <class T>
83  public:
85  static_assert(!utils::strequal(T::name(), ""), "You did not overload the name() function!");
86  ValidatorFactory::instance().registerRoutingGraphValidator(T::name(), []() { return new T(); });
87  }
88 };
89 } // namespace validation
90 } // namespace lanelet
lanelet::validation::ValidatorFactory::ValidatorFactory
ValidatorFactory()=default
lanelet::validation::ValidatorFactory
Definition: ValidatorFactory.h:20
lanelet::validation::ValidatorFactory::mapValidatorRegistry_
std::map< std::string, CreationFcn< MapValidator > > mapValidatorRegistry_
Definition: ValidatorFactory.h:51
lanelet
lanelet::validation::RegisterTrafficRuleValidator::RegisterTrafficRuleValidator
RegisterTrafficRuleValidator()
Definition: ValidatorFactory.h:74
lanelet::validation::ValidatorFactory::registerRoutingGraphValidator
void registerRoutingGraphValidator(const std::string &name, const CreationFcn< RoutingGraphValidator > &creator)
Definition: ValidatorFactory.cpp:74
lanelet::validation::Regexes
std::vector< std::regex > Regexes
Definition: ValidatorFactory.h:12
lanelet::validation::ValidatorFactory::createTrafficRuleValidators
ValidatorsWithName< TrafficRuleValidator > createTrafficRuleValidators(const Regexes &regexes)
Definition: ValidatorFactory.cpp:50
lanelet::validation::ValidatorFactory::registerTrafficRuleValidator
void registerTrafficRuleValidator(const std::string &name, const CreationFcn< TrafficRuleValidator > &creator)
Definition: ValidatorFactory.cpp:69
lanelet::validation::ValidatorFactory::registerMapValidator
void registerMapValidator(const std::string &name, const CreationFcn< MapValidator > &creator)
Definition: ValidatorFactory.cpp:65
lanelet::validation::ValidatorFactory::trafficRuleValidatorRegistry_
std::map< std::string, CreationFcn< TrafficRuleValidator > > trafficRuleValidatorRegistry_
Definition: ValidatorFactory.h:52
lanelet::validation::RegisterRoutingGraphValidator::RegisterRoutingGraphValidator
RegisterRoutingGraphValidator()
Definition: ValidatorFactory.h:84
BasicValidator.h
lanelet::validation::RegisterTrafficRuleValidator
Registration object for traffic rule validators.
Definition: ValidatorFactory.h:72
lanelet::validation::RegisterMapValidator::RegisterMapValidator
RegisterMapValidator()
Definition: ValidatorFactory.h:64
lanelet::validation::ValidatorFactory::instance
static ValidatorFactory & instance()
Definition: ValidatorFactory.cpp:41
lanelet::validation::ValidatorFactory::availableValidators
std::vector< std::string > availableValidators(const Regexes &regexes={})
returns all available parsers as vector
Definition: ValidatorFactory.cpp:58
lanelet::utils::strequal
constexpr bool strequal(char const *lhs, char const *rhs)
lanelet::validation::ValidatorFactory::createRoutingGraphValidators
ValidatorsWithName< RoutingGraphValidator > createRoutingGraphValidators(const Regexes &regexes)
Definition: ValidatorFactory.cpp:54
lanelet::validation::ValidatorWithName
std::pair< std::string, std::unique_ptr< ValidatorT > > ValidatorWithName
Definition: ValidatorFactory.h:15
lanelet::validation::ValidatorFactory::createMapValidators
ValidatorsWithName< MapValidator > createMapValidators(const Regexes &regexes)
Definition: ValidatorFactory.cpp:46
lanelet::validation::RegisterRoutingGraphValidator
Registration object for routing graph validators.
Definition: ValidatorFactory.h:82
lanelet::validation::ValidatorFactory::CreationFcn
std::function< ValidatorT *()> CreationFcn
Definition: ValidatorFactory.h:23
lanelet::validation::ValidatorFactory::routingGraphValidatorRegistry_
std::map< std::string, CreationFcn< RoutingGraphValidator > > routingGraphValidatorRegistry_
Definition: ValidatorFactory.h:53
lanelet::validation::RegisterMapValidator
Registration object for a map validator. Needs to be instanciated as static object once to register a...
Definition: ValidatorFactory.h:62
lanelet::validation::ValidatorsWithName
std::vector< ValidatorWithName< ValidatorT > > ValidatorsWithName
Definition: ValidatorFactory.h:18
Utilities.h


lanelet2_validation
Author(s): Fabian Poggenhans
autogenerated on Thu Mar 6 2025 03:26:17