Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/molecule.hpp

    rc67ff9 r4d2b33  
    2121#include <vector>
    2222
     23#include <boost/iterator/transform_iterator.hpp>
     24
    2325#include <string>
    2426
    25 #include "AtomIdSet.hpp"
    2627#include "Atom/AtomSet.hpp"
    2728#include "CodePatterns/Cacheable.hpp"
    2829#include "CodePatterns/Observer/Observable.hpp"
     30#include "CodePatterns/Observer/ObservedIterator.hpp"
    2931#include "Descriptors/AtomIdDescriptor.hpp"
    3032#include "Fragmentation/HydrogenSaturation_enum.hpp"
     
    3335#include "IdPool_policy.hpp"
    3436#include "IdPool.hpp"
    35 #include "Shapes/Shape.hpp"
    3637#include "types.hpp"
     38
     39// TODO: Was is the include of MoleculeDescriptor_impl.hpp doing in molecule.hpp
     40#include "Descriptors/MoleculeDescriptor_impl.hpp"
    3741
    3842/****************************************** forward declarations *****************************/
     
    5054class MoleculeLeafClass;
    5155class MoleculeListClass;
    52 class MoleculeUnittest;
     56class periodentafel;
    5357class RealSpaceMatrix;
    5458class Vector;
     59class Shape;
     60
     61/******************************** Some definitions for easier reading **********************************/
     62
     63struct FromIdToAtom :
     64  public std::unary_function<atom *, atomId_t>
     65{
     66    atom * operator()(atomId_t id) const {
     67     return World::getInstance().getAtom(AtomById(id));
     68    }
     69};
    5570
    5671/************************************* Class definitions ****************************************/
     
    6176class molecule : public Observable
    6277{
    63   //!> grant unit test access
    64   friend class MoleculeUnittest;
    65   //!> function may access cstor
    6678  friend molecule *NewMolecule();
    67   //!> function may access dstor
    6879  friend void DeleteMolecule(molecule *);
    6980
    7081public:
    71   typedef AtomIdSet::atomIdSet atomIdSet;
    72   typedef AtomIdSet::iterator iterator;
    73   typedef AtomIdSet::const_iterator const_iterator;
     82  typedef std::set<atomId_t> atomIdSet;
     83  typedef boost::transform_iterator<FromIdToAtom, atomIdSet::iterator, atom *, atomId_t> iterator;
     84  typedef boost::transform_iterator<FromIdToAtom, atomIdSet::const_iterator, const atom *, atomId_t const &> const_iterator;
    7485
    7586  int MDSteps; //!< The number of MD steps in Trajectories
     
    8697  Cacheable<int> BondCount; //!< number of atoms, brought up-to-date by doCountBonds()
    8798  moleculeId_t id;
    88   AtomIdSet atomIds; //<!set of atomic ids to check uniqueness of atoms
     99  atomIdSet atomIds; //<!set of atomic ids to check uniqueness of atoms
    89100  IdPool<atomId_t, uniqueId> atomIdPool;  //!< pool of internal ids such that way may guarantee uniqueness
    90101
     
    114125  World::AtomComposite getAtomSet() const;
    115126
    116   // simply pass on all functions to AtomIdSet
    117   iterator begin() {
    118     return atomIds.begin();
    119   }
    120   const_iterator begin() const
    121   {
    122     return atomIds.begin();
    123   }
    124   iterator end()
    125   {
    126     return atomIds.end();
    127   }
    128   const_iterator end() const
    129   {
    130     return atomIds.end();
    131   }
    132   bool empty() const
    133   {
    134     return atomIds.empty();
    135   }
    136   size_t size() const
    137   {
    138     return atomIds.size();
    139   }
    140   const_iterator find(atom * key) const
    141   {
    142     return atomIds.find(key);
    143   }
    144 
    145   /** Returns the set of atomic ids contained in this molecule.
    146    *
    147    * @return set of atomic ids
    148    */
    149   const atomIdSet & getAtomIds() const {
    150     return atomIds.getAtomIds();
    151   }
    152 
    153   std::pair<iterator, bool> insert(atom * const key);
    154 
     127  iterator begin();
     128  const_iterator begin() const;
     129  iterator end();
     130  const_iterator end() const;
     131  bool empty() const;
     132  size_t size() const;
     133  const_iterator find(atom * key) const;
     134  pair<iterator, bool> insert(atom * const key);
    155135  bool containsAtom(atom* key);
    156136
     
    165145   */
    166146  const_iterator erase(const_iterator loc);
    167 
    168147  /** Erase an atom from the list.
    169148   * \note This should only be called by atom::removeFromMolecule(),
     
    198177
    199178public:
    200 
    201   /** Function to create a bounding spherical shape for the currently associated atoms.
    202    *
    203    */
    204   Shape getBoundingShape() const;
    205179
    206180  /// remove atoms from molecule.
     
    255229  bond * CopyBond(atom *left, atom *right, bond *CopyBond);
    256230
    257   molecule *CopyMolecule(const Vector &offset = zeroVec) const;
     231  molecule *CopyMolecule() const;
    258232  molecule* CopyMoleculeFromSubRegion(const Shape&) const;
    259233
Note: See TracChangeset for help on using the changeset viewer.