Changes in src/moleculelist.cpp [482373:244a84]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/moleculelist.cpp
r482373 r244a84 4 4 * 5 5 */ 6 7 #include <cstring> 6 8 7 9 #include "atom.hpp" … … 739 741 /** Dissects given \a *mol into connected subgraphs and inserts them as new molecules but with old atoms into \a this. 740 742 * \param *out output stream for debugging 741 * \param * mol molecule with atoms to dissect743 * \param *periode periodentafel 742 744 * \param *configuration config with BondGraph 743 745 */ 744 void MoleculeListClass::DissectMoleculeIntoConnectedSubgraphs(molecule * const mol, config * const configuration) 745 { 746 void 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 746 777 // 1. dissect the molecule into connected subgraphs 747 778 configuration->BG->ConstructBondGraph(mol); … … 759 790 // 4a. create array of molecules to fill 760 791 const int MolCount = Subgraphs->next->Count(); 792 char number[MAXSTRINGSIZE]; 761 793 molecule **molecules = Malloc<molecule *>(MolCount, "config::Load() - **molecules"); 762 794 for (int i=0;i<MolCount;i++) { 763 795 molecules[i] = (molecule*) new molecule(mol->elemente); 764 796 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; 765 803 insert(molecules[i]); 766 804 } … … 770 808 int *MolMap = Calloc<int>(mol->AtomCount, "config::Load() - *MolMap"); 771 809 MoleculeLeafClass *MolecularWalker = Subgraphs; 772 atom *Walker = NULL;810 Walker = NULL; 773 811 while (MolecularWalker->next != NULL) { 774 812 MolecularWalker = MolecularWalker->next; … … 799 837 } 800 838 } 801 // 4d. we don't need to redo bonds, as they are connected subgraphs and still maintain edtheir ListOfBonds, but we have to remove them from first..last list802 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; 803 841 while (mol->first->next != mol->last) { 804 842 Binder = mol->first->next;
Note:
See TracChangeset
for help on using the changeset viewer.