// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de> // SPDX-License-Identifier: LGPL-3.0-or-later #pragma once namespace ChimeraTK { /********************************************************************************************************************/ /** Struct to define the direction of variables. The main direction is defined * with an enum. In addition the presence of a return channel is specified. */ struct VariableDirection { /** Enum to define directions of variables. The direction is always defined * from the point-of-view of the * owner, i.e. the application module owning the instance of the accessor in * this context. */ enum { consuming, feeding, invalid } dir; /** Presence of return channel */ bool withReturn; /** Comparison */ bool operator==(const VariableDirection& other) const { return dir == other.dir && withReturn == other.withReturn; } bool operator!=(const VariableDirection& other) const { return !operator==(other); } }; /********************************************************************************************************************/ /** Enum to define the update mode of variables. */ enum class UpdateMode { poll, push, invalid }; /********************************************************************************************************************/ /** Enum to define types of VariableNetworkNode */ enum class NodeType { Device, ControlSystem, Application, TriggerReceiver, TriggerProvider, Constant, invalid }; /********************************************************************************************************************/ /** Hierarchy modifier: specify if and how the module hierarchy should be modified in EntityOwner::findTag() etc. */ enum class HierarchyModifier { none, ///< No modification is performed hideThis, ///< The hierarchy level at which this flag is specified is hidden. Everything below this level is moved ///< exactly one level up. The structure below this level is kept. moveToRoot, ///< The module at which this flag is specified is moved to the root level, together with the entire ///< structure below the module. Note: Unless you run findTag() or so on the entire application, the ///< moved hierarchy structures might not be visible in the control system etc. oneLevelUp, ///< Move the module up to the level where the owner lives. Instead of creating a "daughter" ///< of the owning module, it creates a "sister" (module that lives on the same level). ///< This modifyer can only be used in sub-modules, not on the first level oneUpAndHide ///< Move the structure inside the module up to the level where the owner lives. Instead of adding a hierrarchy ///< level, one level is removed. This modifyer can only be used in sub-modules, not on the first level ///< inside an application. }; /********************************************************************************************************************/ /** Enum to define the life-cycle states of an Application. */ enum class LifeCycleState { initialisation, ///< Initialisation phase including ApplicationModule::prepare(). Single threaded operation. All ///< devices are closed. run, ///< Actual run phase with full multi threading. The state is entered right before the threads are launched, so ///< there is no guarantee that the application threads have already reached a certain point. Devices will be opened ///< after this point. shutdown ///< The application is in the process of shutting down. }; /********************************************************************************************************************/ } /* namespace ChimeraTK */