-
Martin Christoph Hierholzer authoredMartin Christoph Hierholzer authored
VirtualModule.h 2.18 KiB
/*
* 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 <ChimeraTK/RegisterPath.h>
#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)
{
if(name.find_first_of("/") != std::string::npos) {
throw ChimeraTK::logic_error("Module names must not contain slashes: '"+name+"'.");
}
}
/** 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 an accessor. The accessor instance will be added to an internal list. */
void addAccessor(VariableNetworkNode accessor);
/** Add a virtual sub-module. The module instance will be added to an internal list. */
void addSubModule(VirtualModule module);
/** Return the submodule with the given name. If it doesn't exist, create it first. */
VirtualModule& createAndGetSubmodule(const RegisterPath& moduleName);
/** Like createAndGetSubmodule(), but recursively create a hierarchy of submodules separated by "/" in the
* moduleName. */
VirtualModule& createAndGetSubmoduleRecursive(const RegisterPath& moduleName);
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 */