Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/atom.cpp

    rad2b411 r1b2d30  
    44 *
    55 */
    6 
    7 #include "Helpers/MemDebug.hpp"
    86
    97#include "atom.hpp"
     
    1614#include "vector.hpp"
    1715#include "World.hpp"
    18 #include "molecule.hpp"
    1916
    2017/************************************* Functions for class atom *************************************/
     
    2421 */
    2522atom::atom() :
    26   father(this), sort(&nr), mol(0)
     23  previous(NULL), next(NULL), father(this), sort(&nr)
    2724{
    2825  node = &x;  // TesselPoint::x can only be referenced from here
     
    3229 */
    3330atom::atom(atom *pointer) :
    34     ParticleInfo(pointer),father(pointer), sort(&nr)
     31    ParticleInfo(pointer),
     32    previous(NULL), next(NULL), father(pointer), sort(&nr)
    3533{
    3634  type = pointer->type;  // copy element of atom
     
    3937  FixedIon = pointer->FixedIon;
    4038  node = &x;
    41   mol = 0;
    4239};
    4340
    4441atom *atom::clone(){
    4542  atom *res = new atom(this);
     43  res->previous=0;
     44  res->next=0;
    4645  res->father = this;
    4746  res->sort = &res->nr;
     
    5150  res->FixedIon = FixedIon;
    5251  res->node = &x;
    53   res->mol = 0;
    5452  World::getInstance().registerAtom(res);
    5553  return res;
     
    6159atom::~atom()
    6260{
    63   removeFromMolecule();
    64   for(BondList::iterator iter=ListOfBonds.begin(); iter!=ListOfBonds.end();){
    65     // deleting the bond will invalidate the iterator !!!
    66     bond *bond =*(iter++);
    67     delete(bond);
    68   }
    6961};
    7062
     
    7567atom *atom::GetTrueFather()
    7668{
    77   if(father == this){ // top most father is the one that points on itself
    78     return this;
    79   }
    80   else if(!father) {
    81     return 0;
    82   }
    83   else {
    84     return father->GetTrueFather();
    85   }
     69  atom *walker = this;
     70  do {
     71    if (walker == walker->father) // top most father is the one that points on itself
     72      break;
     73    walker = walker->father;
     74  } while (walker != NULL);
     75  return walker;
    8676};
    8777
     
    159149  * \return true - \a *out present, false - \a *out is NULL
    160150 */
    161 bool atom::OutputArrayIndexed(ofstream * const out, const int *ElementNo, int *AtomNo, const char *comment) const
     151bool atom::OutputArrayIndexed(ostream * const out, const int *ElementNo, int *AtomNo, const char *comment) const
    162152{
    163153  AtomNo[type->Z]++;  // increment number
     
    236226 * \param *AtomNo pointer to atom counter that is increased by one
    237227 */
    238 void atom::OutputMPQCLine(ofstream * const out, const Vector *center, int *AtomNo = NULL) const
     228void atom::OutputMPQCLine(ostream * const out, const Vector *center, int *AtomNo = NULL) const
    239229{
    240230  *out << "\t\t" << type->symbol << " [ " << x[0]-center->at(0) << "\t" << x[1]-center->at(1) << "\t" << x[2]-center->at(2) << " ]" << endl;
     
    315305}
    316306
    317 atomId_t atom::getId() const {
     307atomId_t atom::getId() {
    318308  return id;
    319309}
    320 
    321 void atom::setMolecule(molecule *_mol){
    322   // take this atom from the old molecule
    323   removeFromMolecule();
    324   mol = _mol;
    325   if(!mol->containsAtom(this)){
    326     mol->AddAtom(this);
    327   }
    328 }
    329 
    330 void atom::removeFromMolecule(){
    331   if(mol){
    332     if(mol->containsAtom(this)){
    333       mol->erase(this);
    334     }
    335     mol=0;
    336   }
    337 }
    338 
    339310
    340311atom* NewAtom(atomId_t _id){
Note: See TracChangeset for help on using the changeset viewer.