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

#ifndef ROSA_AGENT_STATE_HPP
#define ROSA_AGENT_STATE_HPP

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

namespace rosa {
namespace agent {

/// \tparam D type of data
template <typename D> class State : public Functionality {
	
private:
  DynamicHistory<D, HistoryPolicy::FIFO> SampleHistory;		//Make History dynamic
  DynamicHistory<D, HistoryPolicy::SRWF> DAB;				
  DynamicHistory<XXX, HistoryPolicy::LIFO> DABHistory;		//Implement LIFO
  
public:
  
  State(unsigned int sampleHistorySize, unsigned int DABSize, 
        unsigned int DABHistorySize) noexcept : 
		SampleHistory(sampleHistorySize),
        DAB(DABSize),
        DABHistory(DABHistorySize)		{}

  ~State(void) = default;
    
  bool insertSample(D Sample) {
	
	bool workedForAll;
	
	workedForAll = SampleHistory.addEntry(Sample);
	
	if (workedForAll) {
		
		if (numberOfEntries >= DAB) {
			
			
			
		}
		
		
		//check if full/empty
	
		workedForAll &= DAB.addEntry(Sample);
		
		
		
		
		
		
	}
  }
	

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

#endif // ROSA_AGENT_STATE_HPP