#include "GraphicsDataFields.h"
#include <iostream>

using namespace std;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
GraphicsDataFields::GraphicsDataFields(){

}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
GraphicsDataFields::~GraphicsDataFields(){

   std::map<std::string,floatField3D_t*>::iterator mitr;
   
   for( mitr = floatField3DNameMap.begin(); mitr != floatField3DNameMap.end() ; ++mitr){
      if(!mitr->second)
         delete mitr->second;
   }

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void GraphicsDataFields::allocateField3D(unsigned int _sizeL, unsigned int _sizeM, unsigned int _sizeN){

   sizeL=_sizeL;
   sizeM=_sizeM;
   sizeN=_sizeN;
   cerr<<"sizeL="<<sizeL<<"sizeM="<<sizeM<<"sizeN="<<sizeN<<endl;
   field3DGraphicsData.assign(_sizeL,vector<vector<GraphicsData> >(_sizeM,vector<GraphicsData>(_sizeN)));

   field3DConcentration.assign(_sizeL,vector<vector<float> >(_sizeM,vector<float>(_sizeN)));

}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void GraphicsDataFields::allocateFloatField3D(unsigned int _sizeL, unsigned int _sizeM, unsigned int _sizeN , std::string _name){

   floatField3D_t * floatFieldPtr = new floatField3D_t ;
   
   floatFieldPtr->assign(_sizeL,vector<vector<float> >(_sizeM,vector<float>(_sizeN)));
   floatField3DNameMap.insert(std::make_pair(_name,floatFieldPtr));

}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void GraphicsDataFields::allocateVectorFloatField3D(unsigned int _sizeL, unsigned int _sizeM, unsigned int _sizeN , std::string _name){

   vectorFloatField3D_t * fieldPtr = new vectorFloatField3D_t ;
   
   fieldPtr->assign(_sizeL,vector<vector<Coordinates3D<float> > >(_sizeM,vector<Coordinates3D<float> >(_sizeN)));
   vectorFloatField3DNameMap.insert(std::make_pair(_name,fieldPtr));

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void GraphicsDataFields::allocateVectorCellFloatField3D(unsigned int _sizeL, unsigned int _sizeM, unsigned int _sizeN , std::string _name){

   vectorCellFloatField3D_t * fieldPtr = new vectorCellFloatField3D_t ;
   
   fieldPtr->assign(_sizeL,vector<vector<pair<Coordinates3D<float>,CompuCell3D::CellG*> > >
   (_sizeM,vector<pair<Coordinates3D<float>,CompuCell3D::CellG*> >(_sizeN)));
   vectorCellFloatField3DNameMap.insert(std::make_pair(_name,fieldPtr));
}
