Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/periodentafel.cpp

    r112b09 r61745cc  
    44 *
    55 */
    6 
    7 #include "Helpers/MemDebug.hpp"
    86
    97using namespace std;
     
    3230periodentafel::periodentafel()
    3331{
    34   ASSERT(LoadElementsDatabase(new stringstream(elementsDB,ios_base::in)), "General element initialization failed");
    35   ASSERT(LoadValenceDatabase(new stringstream(valenceDB,ios_base::in)), "Valence entry of element initialization failed");
    36   ASSERT(LoadOrbitalsDatabase(new stringstream(orbitalsDB,ios_base::in)), "Orbitals entry of element initialization failed");
    37   ASSERT(LoadHBondAngleDatabase(new stringstream(HbondangleDB,ios_base::in)), "HBond angle entry of element initialization failed");
    38   ASSERT(LoadHBondLengthsDatabase(new stringstream(HbonddistanceDB,ios_base::in)), "HBond distance entry of element initialization failed");
     32  bool status = true;
     33  status = LoadElementsDatabase(new stringstream(elementsDB,ios_base::in));
     34  ASSERT(status,  "General element initialization failed");
     35  status = LoadValenceDatabase(new stringstream(valenceDB,ios_base::in));
     36  ASSERT(status, "Valence entry of element initialization failed");
     37  status = LoadOrbitalsDatabase(new stringstream(orbitalsDB,ios_base::in));
     38  ASSERT(status, "Orbitals entry of element initialization failed");
     39  status = LoadHBondAngleDatabase(new stringstream(HbondangleDB,ios_base::in));
     40  ASSERT(status, "HBond angle entry of element initialization failed");
     41  status = LoadHBondLengthsDatabase(new stringstream(HbonddistanceDB,ios_base::in));
     42  ASSERT(status, "HBond distance entry of element initialization failed");
    3943};
    4044
     
    6670 * \param *pointer element to be removed
    6771 */
    68 void periodentafel::RemoveElement(element * const pointer)
    69 {
    70   RemoveElement(pointer->getNumber());
     72size_t periodentafel::RemoveElement(element * const pointer)
     73{
     74  return RemoveElement(pointer->getNumber());
    7175};
    7276
     
    7478 * \param Z element to be removed
    7579 */
    76 void periodentafel::RemoveElement(atomicNumber_t Z)
    77 {
    78   elements.erase(Z);
     80size_t periodentafel::RemoveElement(atomicNumber_t Z)
     81{
     82  return elements.erase(Z);
    7983};
    8084
     
    229233  strncat(filename, STANDARDELEMENTSDB, MAXSTRINGSIZE-strlen(filename));
    230234  input.open(filename);
     235  if (!input.fail())
     236    DoLog(0) && (Log() << Verbose(0) << "Using " << filename << " as elements database." << endl);
    231237  status = status && LoadElementsDatabase(&input);
     238  input.close();
     239  input.clear();
    232240
    233241  // fill valence DB per element
     
    236244  strncat(filename, STANDARDVALENCEDB, MAXSTRINGSIZE-strlen(filename));
    237245  input.open(filename);
     246  if (!input.fail())
     247    DoLog(0) && (Log() << Verbose(0) << "Using " << filename << " as valence database." << endl);
    238248  otherstatus = otherstatus && LoadValenceDatabase(&input);
     249  input.close();
     250  input.clear();
    239251
    240252  // fill orbitals DB per element
     
    243255  strncat(filename, STANDARDORBITALDB, MAXSTRINGSIZE-strlen(filename));
    244256  input.open(filename);
     257  if (!input.fail())
     258    DoLog(0) && (Log() << Verbose(0) << "Using " << filename << " as orbitals database." << endl);
    245259  otherstatus = otherstatus && LoadOrbitalsDatabase(&input);
     260  input.close();
     261  input.clear();
    246262
    247263  // fill H-BondAngle DB per element
     
    250266  strncat(filename, STANDARDHBONDANGLEDB, MAXSTRINGSIZE-strlen(filename));
    251267  input.open(filename);
     268  if (!input.fail())
     269    DoLog(0) && (Log() << Verbose(0) << "Using " << filename << " as H bond angle database." << endl);
    252270  otherstatus = otherstatus && LoadHBondAngleDatabase(&input);
     271  input.close();
     272  input.clear();
    253273
    254274  // fill H-BondDistance DB per element
     
    257277  strncat(filename, STANDARDHBONDDISTANCEDB, MAXSTRINGSIZE-strlen(filename));
    258278  input.open(filename);
     279  if (!input.fail())
     280    DoLog(0) && (Log() << Verbose(0) << "Using " << filename << " as H bond length database." << endl);
    259281  otherstatus = otherstatus && LoadHBondLengthsDatabase(&input);
     282  input.close();
     283  input.clear();
    260284
    261285  if (!otherstatus){
     
    274298  bool status = true;
    275299  int counter = 0;
     300  pair< std::map<atomicNumber_t,element*>::iterator, bool > InserterTest;
    276301  if (!(*input).fail()) {
    277302    (*input).getline(header1, MAXSTRINGSIZE);
     
    299324      //(*input) >> ws;
    300325      (*input) >> ws;
    301       if (elements.count(neues->Z)) {// if element already present, remove and delete it
    302         element * const Elemental = FindElement(neues->Z);
    303         ASSERT(Elemental != NULL, "element should be present but is not??");
    304         RemoveElement(Elemental);
    305         delete(Elemental);
    306       }
    307326      //neues->Output((ofstream *)&cout);
    308       if ((neues->Z > 0) && (neues->Z < MAX_ELEMENTS)) {
    309         DoLog(0) && (Log() << Verbose(0) << " " << neues->symbol);
    310         elements[neues->getNumber()] = neues;
     327      if ((neues->getNumber() > 0) && (neues->getNumber() < MAX_ELEMENTS)) {
     328        if (elements.count(neues->getNumber())) {// if element already present, remove and delete old one (i.e. replace it)
     329          //cout << neues->symbol << " is present already." << endl;
     330          element * const Elemental = FindElement(neues->getNumber());
     331          ASSERT(Elemental != NULL, "element should be present but is not??");
     332          *Elemental = *neues;
     333        } else {
     334          InserterTest = elements.insert(pair <atomicNumber_t,element*> (neues->getNumber(), neues));
     335          ASSERT(InserterTest.second, "Could not insert new element into periodentafel on LoadElementsDatabase().");
     336        }
     337        DoLog(0) && (Log() << Verbose(0) << " " << elements[neues->getNumber()]->symbol);
    311338        counter++;
    312339      } else {
     
    317344    }
    318345    DoLog(0) && (Log() << Verbose(0) << endl);
    319   } else
     346  } else {
     347    DoeLog(1) && (eLog() << Verbose(1) << "Could not open the database." << endl);
    320348    status = false;
     349  }
    321350
    322351  if (counter == 0)
Note: See TracChangeset for help on using the changeset viewer.