// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de> // SPDX-License-Identifier: LGPL-3.0-or-later #pragma once #include "EntityOwner.h" #include <ChimeraTK/ControlSystemAdapter/ProcessArray.h> #include <thread> namespace ChimeraTK { /** Base class for internal modules which are created by the variable connection code (e.g. * Application::makeConnections()). These modules have to be handled differently since the instance is created * dynamically and thus we cannot store the plain pointer in Application::overallModuleList. * * @todo Currently this class is based on EntityOwner somewhat artificially. Instead the InternalModule class needs * to be properly unified with the normal Module classes. */ class InternalModule : public EntityOwner { public: ~InternalModule() override {} /** Activate synchronisation thread if needed * @todo: Unify with Module::run() */ virtual void activate() {} /** Deactivate synchronisation thread if running * @todo: Unify with Module::terminate() */ virtual void deactivate() {} /** Below all pure virtual functions of EntityOwner are "implemented" just to make the program compile for now. * They are currently not used. */ std::string getQualifiedName() const override { throw; } std::string getFullDescription() const override { throw; } ModuleType getModuleType() const override { throw; } VersionNumber getCurrentVersionNumber() const override { throw; } void setCurrentVersionNumber(VersionNumber /*versionNumber*/) override { throw; } DataValidity getDataValidity() const override { throw; } void incrementDataFaultCounter() override { throw; } void decrementDataFaultCounter() override { throw; } std::list<EntityOwner*> getInputModulesRecursively([[maybe_unused]] std::list<EntityOwner*> startList) override { throw ChimeraTK::logic_error("getInputModulesRecursively() called on an InternalModule (ThreadedFanout or " "TriggerFanout). This is probably " "caused by incorrect ownership of variables/accessors or VariableGroups."); } size_t getCircularNetworkHash() override { throw ChimeraTK::logic_error("getCircularNetworkHash() called on an InternalModule (ThreadedFanout or " "TriggerFanout). This is probably " "caused by incorrect ownership of variables/accessors or VariableGroups."); } }; } /* namespace ChimeraTK */