#ifndef HISTORYMODULE_HEADERFILE
#define HISTORYMODULE_HEADERFILE

#include "HistoryEntry.h"
//#include "Module.h"
#include "Unit.h"
#include <list>

/*
#define MAX_HIST_LENGTH 1000
#define MAX_REC_FREQU 4294967295
*/

#define DELIMITATE_MODE_LBOUND    0
#define DELIMITATE_MODE_SRWF 1	//Stop Recording When Full
#define DELIMITATE_MODE_FIFO 2	//First In First Out
#define DELIMITATE_MODE_LIFO 3	//Last In First Out
#define DELIMITATE_MODE_UBOUND    4


using namespace std;

//class HistoryModule : public Module {
class HistoryModule : public Unit {

	private:
		list<HistoryEntry*> lHistory;
		unsigned int maximumHistoryLength;
		int delimitationMode;

		void initHistoryModule(unsigned int maximumHistoryLength);

		float* observationPointerFloat;
		int* observationPointerInt;

	public:
		HistoryModule(unsigned int maximumHistoryLength);
		HistoryModule(char* name, unsigned int maximumHistoryLength);

		bool setMaximumHistoryLength(unsigned int maximumHistoryLength);
		unsigned int getMaximumHistoryLength();

		bool setDelimitationMode(int delimitationMode);
		int getDelimitationMode();

		unsigned int getNumberOfEntries();

		bool setObservationPointer(float* observationPointer);
		bool setObservationPointer(int* observationPointer);
		bool deleteObservationPointer();

		list<HistoryEntry*>* getObservationPointer();

		bool storeValue();
		bool deleteOldestEntry();

};

#endif