/*
 * DataSet.h: declaration of DataSet,Parameters and Inputs classes
 */

#ifndef _CONTAINER_DATASET_H_
#define _CONTAINER_DATASET_H_

#include <vector>
#include "../classes/objects/Object.h"
#include "../toolkits/toolkits.h"
#include "../EnumDefinitions/EnumDefinitions.h"

/*forward declarations */
class Elements;
class Loads;
class Nodes;
class Vertices;
class Materials;
class Parameters;
class Patch;
class Results;
class Patch;

class DataSet{

	public: 

		/*internals: */
		std::vector<Object*> objects;

		/*type of dataset: */
		int             enum_type;

		/*sorting: */
		int             sorted;
		int             presorted;
		int*            sorted_ids;
		int*            id_offsets;

		/*constructors, destructors*/
		DataSet();
		DataSet(int enum_type);
		~DataSet();

		/*management*/
		int      GetEnum();
		int      GetEnum(int offset);
		void     Echo();
		void     DeepEcho();
		int      AddObject(Object *object);
		int      DeleteObject(int id);
		int      Size();
		void     clear();
		Object  *GetObjectByOffset(int  offset);
		Object  *GetObjectById(int *poffset,int eid);
		void     Presort();
		void     SetSorting(int *in_sorted_ids,int*in_id_offsets);
		void     Sort();
		DataSet *Copy(void);
		int      DeleteObject(Object *object);
		Results *SpawnTriaResults(int *indices);

};

#endif
