/* * VirtualModule.h * * Created on: Apr 4, 2017 * Author: Martin Hierholzer */ #ifndef CHIMERATK_VIRTUAL_MODULE_H #define CHIMERATK_VIRTUAL_MODULE_H #include <list> #include <boost/thread.hpp> #include "Module.h" namespace ChimeraTK { /** A virtual module generated by EntityOwner::findTag(). */ class VirtualModule : public Module { public: /** Constructor */ VirtualModule(const std::string &name, const std::string &description, ModuleType moduleType) : Module(nullptr, name, description), _moduleType(moduleType) {} /** Copy constructor */ VirtualModule(const VirtualModule &other); /** Assignment operator */ VirtualModule& operator=(const VirtualModule &other); /** Destructor */ virtual ~VirtualModule(); VariableNetworkNode operator()(const std::string& variableName) const override; Module& operator[](const std::string& moduleName) const override; void connectTo(const Module &target, VariableNetworkNode trigger={}) const override; /** Add a virtual sub-module. The module instance will be added to an internal list. */ void addSubModule(VirtualModule module); ModuleType getModuleType() const override { return _moduleType; } const Module& virtualise() const override; protected: std::list<VirtualModule> submodules; ModuleType _moduleType; }; } /* namespace ChimeraTK */ #endif /* CHIMERATK_VIRTUAL_MODULE_H */