/*
 * Flags.h
 *
 *  Created on: Jun 14, 2016
 *      Author: Martin Hierholzer
 */

#ifndef CHIMERATK_FLAGS_H
#define CHIMERATK_FLAGS_H

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
  };

} /* namespace ChimeraTK */

#endif /* CHIMERATK_FLAGS_H */