//===-- rosa/agent/SystemState.hpp ------------------------------*- C++ -*-===//
//
//                                 The RoSA Framework
//
//===----------------------------------------------------------------------===//
///
/// \file rosa/agent/SystemState.hpp
///
/// \author Maximilian Götzinger (maximilian.goetzinger@tuwien.ac.at)
///
/// \date 2019
///
/// \brief Definition of *system state* *functionality*.
///
//===----------------------------------------------------------------------===//

#ifndef ROSA_AGENT_SYSTEMSTATE_HPP
#define ROSA_AGENT_SYSTEMSTATE_HPP

#include "rosa/agent/Functionality.h"
#include "rosa/agent/SignalState.hpp"

#include "rosa/support/debug.hpp"

#include <array>

namespace rosa {
namespace agent {

/// TODO TEXT
template <typename INDATATYPE, typename CONFDATATYPE, typename PROCDATATYPE,
          std::size_t NUMOFINPUTSIGNALS, std::size_t NUMOFOUTPUTSIGNALS>
class SystemState : public Functionality {

  // Make sure the actual type arguments are matching our expectations.
  STATIC_ASSERT(std::is_arithmetic<CONFDATATYPE>::value,
                "confidence abstraction type is not to arithmetic");

private:
  // TODO: vector
  std::array<SignalState<INDATATYPE, CONFDATATYPE, PROCDATATYPE>,
             NUMOFINPUTSIGNALS>
      InputSignalStates;
  std::array<SignalState<INDATATYPE, CONFDATATYPE, PROCDATATYPE>,
             NUMOFOUTPUTSIGNALS>
      OutputSignalStates;

public:
  //  SystemState(unsigned int NumberOfInputSignals) noexcept : {}
};

} // End namespace agent
} // End namespace rosa

#endif // ROSA_AGENT_SYSTEMSTATE_HPP
