ValidatorFactory.cpp
Go to the documentation of this file.
2 
3 namespace lanelet {
4 namespace validation {
5 namespace {
6 
7 std::vector<std::string> matchSingleRegex(const std::regex& regex, const std::vector<std::string>& toMatch) {
8  std::vector<std::string> matches;
9  for (const auto& str : toMatch) {
10  if (std::regex_match(str, regex)) {
11  matches.push_back(str);
12  }
13  }
14  return matches;
15 }
16 
17 template <typename RegistryT>
18 std::vector<std::string> matchValidators(const Regexes& regexes, const RegistryT& registry) {
19  auto getKeys = [](auto& map) { return utils::transform(map, [](auto elem) { return elem.first; }); };
20  auto toMatch = getKeys(registry);
21  if (regexes.empty()) {
22  return toMatch;
23  }
24  auto matches = utils::concatenate(regexes, [&toMatch](auto& regex) { return matchSingleRegex(regex, toMatch); });
25  std::sort(matches.begin(), matches.end());
26  auto eraseIt = std::unique(matches.begin(), matches.end());
27  matches.erase(eraseIt, matches.end());
28  return matches;
29 }
30 
31 template <typename ValidatorT>
32 ValidatorsWithName<ValidatorT> createValidators(
33  const Regexes& regexes, const std::map<std::string, ValidatorFactory::CreationFcn<ValidatorT>>& registry) {
34  auto matches = matchValidators(regexes, registry);
35  return utils::transform(matches, [&registry](auto& match) {
36  return std::make_pair(match, std::unique_ptr<ValidatorT>(registry.at(match)()));
37  });
38 }
39 } // namespace
40 
42  static ValidatorFactory validatorFactory;
43  return validatorFactory;
44 }
45 
47  return createValidators(regexes, mapValidatorRegistry_);
48 }
49 
51  return createValidators(regexes, trafficRuleValidatorRegistry_);
52 }
53 
55  return createValidators(regexes, routingGraphValidatorRegistry_);
56 }
57 
58 std::vector<std::string> ValidatorFactory::availableValidators(const Regexes& regexes) {
59  auto mapValidators = matchValidators(regexes, mapValidatorRegistry_);
60  auto ruleValidators = matchValidators(regexes, trafficRuleValidatorRegistry_);
61  auto routingValidators = matchValidators(regexes, routingGraphValidatorRegistry_);
62  return utils::concatenate({mapValidators, ruleValidators, routingValidators});
63 }
64 
65 void ValidatorFactory::registerMapValidator(const std::string& name, const CreationFcn<MapValidator>& creator) {
66  mapValidatorRegistry_.emplace(name, creator);
67 }
68 
70  const CreationFcn<TrafficRuleValidator>& creator) {
71  trafficRuleValidatorRegistry_.emplace(name, creator);
72 }
73 
75  const CreationFcn<RoutingGraphValidator>& creator) {
76  routingGraphValidatorRegistry_.emplace(name, creator);
77 }
78 
79 } // namespace validation
80 } // namespace lanelet
lanelet::validation::ValidatorFactory
Definition: ValidatorFactory.h:20
lanelet::validation::ValidatorFactory::mapValidatorRegistry_
std::map< std::string, CreationFcn< MapValidator > > mapValidatorRegistry_
Definition: ValidatorFactory.h:51
lanelet
lanelet::utils::concatenate
auto concatenate(ContainerT &&c)
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::utils::transform
auto transform(Container &&c, Func f)
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::validation::ValidatorFactory::createRoutingGraphValidators
ValidatorsWithName< RoutingGraphValidator > createRoutingGraphValidators(const Regexes &regexes)
Definition: ValidatorFactory.cpp:54
ValidatorFactory.h
lanelet::validation::ValidatorFactory::createMapValidators
ValidatorsWithName< MapValidator > createMapValidators(const Regexes &regexes)
Definition: ValidatorFactory.cpp:46
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::ValidatorsWithName
std::vector< ValidatorWithName< ValidatorT > > ValidatorsWithName
Definition: ValidatorFactory.h:18


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