Factory.h
Go to the documentation of this file.
1 #pragma once
3 
4 #include <cstring>
5 #include <functional>
6 #include <map>
7 #include <string>
8 
10 #include "lanelet2_io/Projection.h"
13 
14 namespace lanelet {
15 namespace io_handlers {
19 class ParserFactory { // NOLINT
20  public:
21  using ParserCreationFcn = std::function<Parser*(const Projector&, const io::Configuration&)>;
22 
23  static ParserFactory& instance();
24 
33  static Parser::Ptr create(const std::string& parserName, const Projector& projector,
34  const io::Configuration& config = io::Configuration());
35 
45  static Parser::Ptr createFromExtension(const std::string& extension, const Projector& projector,
46  const io::Configuration& config = io::Configuration());
47 
52  static std::vector<std::string> availableParsers();
53 
58  static std::vector<std::string> availableExtensions();
59 
60  template <typename T>
61  friend class RegisterParser;
62 
63  private:
64  void registerParser(const std::string& strategy, const std::string& extension,
65  const ParserCreationFcn& factoryFunction);
66 
67  ParserFactory() = default;
68  std::map<std::string, ParserCreationFcn> registry_;
69  std::map<std::string, ParserCreationFcn> extensionRegistry_;
70 };
71 
75 class WriterFactory { // NOLINT
76  public:
77  using WriterCreationFcn = std::function<Writer*(const Projector&, const io::Configuration&)>;
78 
79  static WriterFactory& instance();
80 
89  static Writer::Ptr create(const std::string& writerName, const Projector& projector,
90  const io::Configuration& config = io::Configuration());
91 
101  static Writer::Ptr createFromExtension(const std::string& extension, const Projector& projector,
102  const io::Configuration& config = io::Configuration());
103 
108  static std::vector<std::string> availableWriters();
109 
114  static std::vector<std::string> availableExtensions();
115 
116  template <typename T>
117  friend class RegisterWriter;
118 
119  private:
120  void registerWriter(const std::string& strategy, const std::string& extension,
121  const WriterCreationFcn& factoryFunction);
122 
123  WriterFactory() = default;
124  std::map<std::string, WriterCreationFcn> registry_;
125  std::map<std::string, WriterCreationFcn> extensionRegistry_;
126 };
127 
134 template <class T>
136  public:
138  static_assert(!utils::strequal(T::name(), ""), "You did not overload the name() function!");
140  T::name(), T::extension(), [](const Projector& projector, const io::Configuration& config) -> Writer* {
141  return new T(projector, config);
142  });
143  }
144 };
145 
152 template <class T>
154  public:
156  static_assert(!utils::strequal(T::name(), ""), "You did not overload the name() function!");
158  T::name(), T::extension(), [](const Projector& projector, const io::Configuration& config) -> Parser* {
159  return new T(projector, config);
160  });
161  }
162 };
163 } // namespace io_handlers
164 } // namespace lanelet
static Parser::Ptr createFromExtension(const std::string &extension, const Projector &projector, const io::Configuration &config=io::Configuration())
creates a matching parser for the given file extension
Definition: Factory.cpp:35
Factory class for all suppored lanelet map parsers.
Definition: Factory.h:19
std::function< Parser *(const Projector &, const io::Configuration &)> ParserCreationFcn
Definition: Factory.h:21
static std::vector< std::string > availableParsers()
returns all available parsers as vector
Definition: Factory.cpp:47
std::map< std::string, WriterCreationFcn > extensionRegistry_
Definition: Factory.h:125
std::map< std::string, ParserCreationFcn > extensionRegistry_
Definition: Factory.h:69
std::function< Writer *(const Projector &, const io::Configuration &)> WriterCreationFcn
Definition: Factory.h:77
Base object for parsers. To create a new parser, you have to do the following steps: ...
Definition: Parser.h:22
static WriterFactory & instance()
Definition: Factory.cpp:123
Registration object for a parser. Needs to be instanciated as static object once to register a parser...
Definition: Factory.h:153
std::map< std::string, Attribute > Configuration
Definition: Configuration.h:8
constexpr bool strequal(char const *lhs, char const *rhs)
std::map< std::string, ParserCreationFcn > registry_
Definition: Factory.h:68
static ParserFactory & instance()
Definition: Factory.cpp:65
Registration object for a writer. Needs to be instanciated as static object once to register a writer...
Definition: Factory.h:135
std::shared_ptr< Writer > Ptr
Definition: Writer.h:26
Factory class for all supported lanelet map writers.
Definition: Factory.h:75
std::shared_ptr< Parser > Ptr
Definition: Parser.h:26
std::map< std::string, WriterCreationFcn > registry_
Definition: Factory.h:124
static Parser::Ptr create(const std::string &parserName, const Projector &projector, const io::Configuration &config=io::Configuration())
creates a parser that matches the given name.
Definition: Factory.cpp:23
static std::vector< std::string > availableExtensions()
returns all available extensions as vector
Definition: Factory.cpp:56
Base object for writers. To create a new writer, you have to do the following steps: ...
Definition: Writer.h:22
void registerParser(const std::string &strategy, const std::string &extension, const ParserCreationFcn &factoryFunction)
Definition: Factory.cpp:70
void registerWriter(const std::string &strategy, const std::string &extension, const WriterCreationFcn &factoryFunction)
Definition: Factory.cpp:128


lanelet2_io
Author(s): Fabian Poggenhans
autogenerated on Tue Jun 6 2023 02:23:45