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
lanelet::io_handlers::WriterFactory::availableExtensions
static std::vector< std::string > availableExtensions()
returns all available extensions as vector
Definition: Factory.cpp:114
lanelet::io_handlers::WriterFactory::extensionRegistry_
std::map< std::string, WriterCreationFcn > extensionRegistry_
Definition: Factory.h:125
lanelet::io_handlers::WriterFactory::registry_
std::map< std::string, WriterCreationFcn > registry_
Definition: Factory.h:124
lanelet::io_handlers::ParserFactory::ParserCreationFcn
std::function< Parser *(const Projector &, const io::Configuration &)> ParserCreationFcn
Definition: Factory.h:21
Parser.h
lanelet::io_handlers::ParserFactory::availableParsers
static std::vector< std::string > availableParsers()
returns all available parsers as vector
Definition: Factory.cpp:47
lanelet::io_handlers::ParserFactory::createFromExtension
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
lanelet::io_handlers::ParserFactory
Factory class for all suppored lanelet map parsers.
Definition: Factory.h:19
lanelet
lanelet::io::Configuration
std::map< std::string, Attribute > Configuration
Definition: Configuration.h:8
lanelet::io_handlers::ParserFactory::registerParser
void registerParser(const std::string &strategy, const std::string &extension, const ParserCreationFcn &factoryFunction)
Definition: Factory.cpp:70
lanelet::io_handlers::WriterFactory::WriterCreationFcn
std::function< Writer *(const Projector &, const io::Configuration &)> WriterCreationFcn
Definition: Factory.h:77
lanelet::io_handlers::WriterFactory
Factory class for all supported lanelet map writers.
Definition: Factory.h:75
lanelet::io_handlers::ParserFactory::extensionRegistry_
std::map< std::string, ParserCreationFcn > extensionRegistry_
Definition: Factory.h:69
lanelet::io_handlers::WriterFactory::instance
static WriterFactory & instance()
Definition: Factory.cpp:123
Writer.h
lanelet::io_handlers::Parser
Base object for parsers. To create a new parser, you have to do the following steps:
Definition: Parser.h:22
lanelet::Projector
Definition: Projection.h:22
lanelet::io_handlers::ParserFactory::registry_
std::map< std::string, ParserCreationFcn > registry_
Definition: Factory.h:68
lanelet::io_handlers::WriterFactory::create
static Writer::Ptr create(const std::string &writerName, const Projector &projector, const io::Configuration &config=io::Configuration())
creates a writer that matches the given name.
Definition: Factory.cpp:81
lanelet::io_handlers::ParserFactory::ParserFactory
ParserFactory()=default
lanelet::io_handlers::ParserFactory::instance
static ParserFactory & instance()
Definition: Factory.cpp:65
lanelet::io_handlers::Writer
Base object for writers. To create a new writer, you have to do the following steps:
Definition: Writer.h:22
lanelet::io_handlers::RegisterParser
Registration object for a parser. Needs to be instanciated as static object once to register a parser...
Definition: Factory.h:153
lanelet::utils::strequal
constexpr bool strequal(char const *lhs, char const *rhs)
lanelet::io_handlers::WriterFactory::createFromExtension
static Writer::Ptr createFromExtension(const std::string &extension, const Projector &projector, const io::Configuration &config=io::Configuration())
creates a matching writer for the given file extension
Definition: Factory.cpp:93
lanelet::io_handlers::WriterFactory::WriterFactory
WriterFactory()=default
lanelet::io_handlers::ParserFactory::create
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
lanelet::io_handlers::Parser::Ptr
std::shared_ptr< Parser > Ptr
Definition: Parser.h:26
lanelet::io_handlers::RegisterWriter::RegisterWriter
RegisterWriter()
Definition: Factory.h:137
lanelet::io_handlers::RegisterWriter
Registration object for a writer. Needs to be instanciated as static object once to register a writer...
Definition: Factory.h:135
lanelet::io_handlers::ParserFactory::availableExtensions
static std::vector< std::string > availableExtensions()
returns all available extensions as vector
Definition: Factory.cpp:56
Projection.h
lanelet::io_handlers::Writer::Ptr
std::shared_ptr< Writer > Ptr
Definition: Writer.h:26
lanelet::io_handlers::WriterFactory::registerWriter
void registerWriter(const std::string &strategy, const std::string &extension, const WriterCreationFcn &factoryFunction)
Definition: Factory.cpp:128
Utilities.h
lanelet::io_handlers::WriterFactory::availableWriters
static std::vector< std::string > availableWriters()
returns all available writers as vector
Definition: Factory.cpp:105
Configuration.h
lanelet::io_handlers::RegisterParser::RegisterParser
RegisterParser()
Definition: Factory.h:155


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