28 #include <type_traits>
48 #define DEFINE_CONTROLLER_FACTORY(xFactoryType, xConfigType, xName, xDescription) \
49 class xFactoryType : public ::cloe::ControllerFactory { \
51 xFactoryType() : ::cloe::ControllerFactory(xName, xDescription) {} \
52 std::unique_ptr<::cloe::ControllerFactory> clone() const override { \
53 return std::make_unique<std::decay<decltype(*this)>::type>(*this); \
56 std::unique_ptr<::cloe::Controller> make(const ::fable::Conf&) const override; \
59 ::cloe::Schema schema_impl() override { return config_.schema(); } \
62 xConfigType config_; \
73 #define DEFINE_CONTROLLER_FACTORY_MAKE(xFactoryType, xControllerType) \
74 std::unique_ptr<::cloe::Controller> xFactoryType::make(const ::fable::Conf& c) const { \
75 decltype(config_) conf{config_}; \
76 if (!c->is_null()) { \
79 return std::make_unique<xControllerType>(this->name(), conf); \
136 virtual bool has_vehicle()
const {
return static_cast<bool>(veh_); }
144 virtual std::shared_ptr<Vehicle>
get_vehicle()
const {
return veh_; }
154 virtual void set_vehicle(std::shared_ptr<Vehicle> v) { veh_ = std::move(v); }
157 std::shared_ptr<Vehicle> veh_{
nullptr};
166 static constexpr
char const* PLUGIN_TYPE =
"controller";
167 static constexpr
char const* PLUGIN_API_VERSION =
"2.0";
172 using ModelFactory::ModelFactory;
187 virtual std::unique_ptr<ControllerFactory>
clone()
const = 0;
Definition: controller.hpp:164
virtual std::unique_ptr< Controller > make(const fable::Conf &c) const =0
virtual std::unique_ptr< ControllerFactory > clone() const =0
Definition: controller.hpp:126
virtual std::shared_ptr< Vehicle > get_vehicle() const
Definition: controller.hpp:144
virtual bool has_vehicle() const
Definition: controller.hpp:136
virtual void set_vehicle(std::shared_ptr< Vehicle > v)
Definition: controller.hpp:154
Definition: model.hpp:403
Definition: model.hpp:203