--- trunk/OOPSE/libmdtools/SimInfo.cpp 2003/07/21 16:23:57 642 +++ trunk/OOPSE/libmdtools/SimInfo.cpp 2003/08/07 21:47:18 670 @@ -54,7 +54,21 @@ SimInfo::SimInfo(){ useGB = 0; useEAM = 0; + myConfiguration = new SimState(); + wrapMeSimInfo( this ); +} + + +SimInfo::~SimInfo(){ + + delete myConfiguration; + + map::iterator i; + + for(i = properties.begin(); i != properties.end(); i++) + delete (*i).second; + } void SimInfo::setBox(double newBox[3]) { @@ -292,6 +306,8 @@ void SimInfo::calcBoxL( void ){ dsq = dx*dx + dy*dy + dz*dz; boxL[2] = sqrt( dsq ); if( (0.5 * boxL[2]) < maxCutoff ) maxCutoff = 0.5 * boxL[2]; + + checkCutOffs(); } @@ -457,12 +473,14 @@ void SimInfo::checkCutOffs( void ){ void SimInfo::checkCutOffs( void ){ int cutChanged = 0; + + if( boxIsInit ){ //we need to check cutOffs against the box - - if( maxCutoff > rCut ){ + + if(( maxCutoff > rCut )&&(usePBC)){ if( rCut < origRcut ){ rCut = origRcut; if (rCut > maxCutoff) rCut = maxCutoff; @@ -491,7 +509,7 @@ void SimInfo::checkCutOffs( void ){ } - if (rCut > maxCutoff) { + if ((rCut > maxCutoff)&&(usePBC)) { sprintf( painCave.errMsg, "New Box size is setting the long range cutoff radius " "to %lf\n", @@ -529,3 +547,52 @@ void SimInfo::checkCutOffs( void ){ oldEcr = ecr; oldRcut = rCut; } + +void SimInfo::addProperty(GenericData* prop){ + + map::iterator result; + result = properties.find(prop->getID()); + + //we can't simply use properties[prop->getID()] = prop, + //it will cause memory leak if we already contain a propery which has the same name of prop + + if(result != properties.end()){ + + delete (*result).second; + (*result).second = prop; + + } + else{ + + properties[prop->getID()] = prop; + + } + +} + +GenericData* SimInfo::getProperty(const string& propName){ + + map::iterator result; + + //string lowerCaseName = (); + + result = properties.find(propName); + + if(result != properties.end()) + return (*result).second; + else + return NULL; +} + +vector SimInfo::getProperties(){ + + vector result; + map::iterator i; + + for(i = properties.begin(); i != properties.end(); i++) + result.push_back((*i).second); + + return result; +} + +