Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/moleculelist.cpp

    r482373 r244a84  
    44 *
    55 */
     6
     7#include <cstring>
    68
    79#include "atom.hpp"
     
    739741/** Dissects given \a *mol into connected subgraphs and inserts them as new molecules but with old atoms into \a this.
    740742 * \param *out output stream for debugging
    741  * \param *mol molecule with atoms to dissect
     743 * \param *periode periodentafel
    742744 * \param *configuration config with BondGraph
    743745 */
    744 void MoleculeListClass::DissectMoleculeIntoConnectedSubgraphs(molecule * const mol, config * const configuration)
    745 {
     746void MoleculeListClass::DissectMoleculeIntoConnectedSubgraphs(const periodentafel * const periode, config * const configuration)
     747{
     748  molecule *mol = new molecule(periode);
     749  atom *Walker = NULL;
     750  atom *Advancer = NULL;
     751  bond *Binder = NULL;
     752  bond *Stepper = NULL;
     753  // 0. gather all atoms into single molecule
     754  for (MoleculeList::iterator MolRunner = ListOfMolecules.begin(); !ListOfMolecules.empty(); MolRunner = ListOfMolecules.begin()) {
     755    // shift all atoms to new molecule
     756    Advancer = (*MolRunner)->start->next;
     757    while (Advancer != (*MolRunner)->end) {
     758      Walker = Advancer;
     759      Advancer = Advancer->next;
     760      Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl;
     761      unlink(Walker);
     762      Walker->father = Walker;
     763      mol->AddAtom(Walker);    // counting starts at 1
     764    }
     765    // remove all bonds
     766    Stepper = (*MolRunner)->first->next;
     767    while (Stepper != (*MolRunner)->last) {
     768      Binder = Stepper;
     769      Stepper = Stepper->next;
     770      delete(Binder);
     771    }
     772    // remove the molecule
     773    delete(*MolRunner);
     774    ListOfMolecules.erase(MolRunner);
     775  }
     776
    746777  // 1. dissect the molecule into connected subgraphs
    747778  configuration->BG->ConstructBondGraph(mol);
     
    759790  // 4a. create array of molecules to fill
    760791  const int MolCount = Subgraphs->next->Count();
     792  char number[MAXSTRINGSIZE];
    761793  molecule **molecules = Malloc<molecule *>(MolCount, "config::Load() - **molecules");
    762794  for (int i=0;i<MolCount;i++) {
    763795    molecules[i] = (molecule*) new molecule(mol->elemente);
    764796    molecules[i]->ActiveFlag = true;
     797    strncpy(molecules[i]->name, mol->name, MAXSTRINGSIZE);
     798    if (MolCount > 1) {
     799      sprintf(number, "-%d", i+1);
     800      strncat(molecules[i]->name, number, MAXSTRINGSIZE - strlen(mol->name) - 1);
     801    }
     802    cout << "MolName is " << molecules[i]->name << endl;
    765803    insert(molecules[i]);
    766804  }
     
    770808  int *MolMap = Calloc<int>(mol->AtomCount, "config::Load() - *MolMap");
    771809  MoleculeLeafClass *MolecularWalker = Subgraphs;
    772   atom *Walker = NULL;
     810  Walker = NULL;
    773811  while (MolecularWalker->next != NULL) {
    774812    MolecularWalker = MolecularWalker->next;
     
    799837    }
    800838  }
    801   // 4d. we don't need to redo bonds, as they are connected subgraphs and still maintained their ListOfBonds, but we have to remove them from first..last list
    802   bond *Binder = mol->first;
     839  // 4d. we don't need to redo bonds, as they are connected subgraphs and still maintain their ListOfBonds, but we have to remove them from first..last list
     840  Binder = mol->first;
    803841  while (mol->first->next != mol->last) {
    804842    Binder = mol->first->next;
Note: See TracChangeset for help on using the changeset viewer.