- Timestamp:
- Jul 24, 2015, 4:44:34 PM (10 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, Candidate_v1.7.0, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- 63fb7a
- Parents:
- 97445f
- git-author:
- Frederik Heber <heber@…> (06/01/15 08:30:56)
- git-committer:
- Frederik Heber <heber@…> (07/24/15 16:44:34)
- Location:
- src
- Files:
-
- 24 edited
-
Atom/AtomSet.hpp (modified) (2 diffs)
-
Descriptors/AtomDescriptor.cpp (modified) (11 diffs)
-
Descriptors/AtomDescriptor.hpp (modified) (3 diffs)
-
Descriptors/AtomDescriptor_impl.hpp (modified) (9 diffs)
-
Descriptors/AtomIdDescriptor.cpp (modified) (2 diffs)
-
Descriptors/AtomIdDescriptor_impl.hpp (modified) (1 diff)
-
Descriptors/AtomOfMoleculeDescriptor.cpp (modified) (1 diff)
-
Descriptors/AtomOfMoleculeDescriptor_impl.hpp (modified) (1 diff)
-
Descriptors/AtomOfMoleculeSelectionDescriptor.cpp (modified) (3 diffs)
-
Descriptors/AtomOfMoleculeSelectionDescriptor_impl.hpp (modified) (1 diff)
-
Descriptors/AtomOrderDescriptor.cpp (modified) (3 diffs)
-
Descriptors/AtomOrderDescriptor_impl.hpp (modified) (1 diff)
-
Descriptors/AtomSelectionDescriptor.cpp (modified) (3 diffs)
-
Descriptors/AtomSelectionDescriptor_impl.hpp (modified) (1 diff)
-
Descriptors/AtomShapeDescriptor.cpp (modified) (3 diffs)
-
Descriptors/AtomShapeDescriptor_impl.hpp (modified) (1 diff)
-
Descriptors/AtomTypeDescriptor.cpp (modified) (1 diff)
-
Descriptors/AtomTypeDescriptor_impl.hpp (modified) (1 diff)
-
Descriptors/AtomsWithinDistanceOfDescriptor.cpp (modified) (3 diffs)
-
Descriptors/AtomsWithinDistanceOfDescriptor_impl.hpp (modified) (1 diff)
-
Descriptors/DescriptorBase.hpp (modified) (2 diffs)
-
Descriptors/DescriptorBase_impl.hpp (modified) (3 diffs)
-
World.cpp (modified) (1 diff)
-
World.hpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Atom/AtomSet.hpp
r97445f r795c0f 36 36 template <> 37 37 struct is_atom<atom*>{ 38 typedef void wrong_type; 39 }; 40 41 template <> 42 struct is_atom<const atom*>{ 38 43 typedef void wrong_type; 39 44 }; … … 198 203 // allows simpler definition of AtomSets 199 204 #define ATOMSET(container_type) AtomSetMixin<container_type<atom*> > 205 #define CONSTATOMSET(container_type) AtomSetMixin<container_type<const atom*> > 200 206 201 207 #endif /* ATOMSET_HPP_ */ -
src/Descriptors/AtomDescriptor.cpp
r97445f r795c0f 49 49 50 50 typedef World::AtomSet::internal_iterator atoms_iter_t; 51 typedef World::AtomSet::const_iterator atoms_const_iter_t; 51 52 52 53 /************************ Forwarding object **************************************/ … … 75 76 } 76 77 78 const atom* AtomDescriptor::find() const { 79 return const_cast<const impl_t &>(*impl).find(); 80 } 81 77 82 std::vector<atom*> AtomDescriptor::findAll(){ 78 83 return impl->findAll(); 79 84 } 80 85 86 std::vector<const atom*> AtomDescriptor::findAll() const { 87 return const_cast<const impl_t &>(*impl).findAll(); 88 } 89 81 90 AtomDescriptor::impl_ptr AtomDescriptor::get_impl() const{ 82 91 return impl; … … 98 107 World::AtomSet& AtomDescriptor_impl::getAtoms(){ 99 108 return World::getInstance().atoms; 109 } 110 111 const World::AtomSet& AtomDescriptor_impl::getAtoms() const { 112 return const_cast<const World &>(World::getInstance()).atoms; 100 113 } 101 114 … … 104 117 atoms_iter_t res = find_if(atoms.begin_internal(),atoms.end_internal(),boost::bind(&AtomDescriptor_impl::predicate,this,_1)); 105 118 return (res!=atoms.end_internal())?((*res).second):0; 119 } 120 121 const atom* AtomDescriptor_impl::find() const { 122 const World::AtomSet &atoms = getAtoms(); 123 atoms_const_iter_t res = find_if(atoms.begin(),atoms.end(),boost::bind(&AtomDescriptor_impl::predicate,this,_1)); 124 return (res!=atoms.end())?((*res).second):0; 106 125 } 107 126 … … 111 130 for_each(atoms.begin_internal(), 112 131 atoms.end_internal(), 113 boost::bind(&AtomDescriptor_impl::checkAndAdd, 114 this,&res,_1)); 132 boost::bind(static_cast<void (AtomDescriptor_impl::*)( 133 std::vector<atom*> *, 134 std::pair<atomId_t,atom*>)>(&AtomDescriptor_impl::checkAndAdd), 135 this,boost::cref(&res),_1)); 136 return res; 137 } 138 139 vector<const atom*> AtomDescriptor_impl::findAll() const { 140 vector<const atom*> res; 141 const World::AtomSet &atoms = getAtoms(); 142 for_each(atoms.begin(), 143 atoms.end(), 144 boost::bind(static_cast<void (AtomDescriptor_impl::*)( 145 std::vector<const atom*> *, 146 std::pair<atomId_t,const atom*>) const>(&AtomDescriptor_impl::checkAndAdd), 147 boost::cref(this),&res,_1)); 115 148 return res; 116 149 } … … 122 155 } 123 156 157 void AtomDescriptor_impl::checkAndAdd(std::vector<const atom*> *v,std::pair<atomId_t,const atom*> p) const{ 158 if(predicate(p)){ 159 v->push_back(p.second); 160 } 161 } 162 124 163 /************************** Universe and Emptyset *****************/ 125 164 … … 130 169 {} 131 170 132 bool AtomAllDescriptor_impl::predicate(std::pair<atomId_t, atom*>){171 bool AtomAllDescriptor_impl::predicate(std::pair<atomId_t,const atom*>) const{ 133 172 return true; 134 173 } … … 144 183 {} 145 184 146 bool AtomNoneDescriptor_impl::predicate(std::pair<atomId_t, atom*>){185 bool AtomNoneDescriptor_impl::predicate(std::pair<atomId_t,const atom*>) const{ 147 186 return false; 148 187 } … … 162 201 {} 163 202 164 bool AtomAndDescriptor_impl::predicate(std::pair<atomId_t, atom*> atom){203 bool AtomAndDescriptor_impl::predicate(std::pair<atomId_t,const atom*> atom) const{ 165 204 return lhs->predicate(atom) && rhs->predicate(atom); 166 205 } … … 178 217 } 179 218 180 bool AtomOrDescriptor_impl::predicate(std::pair<atomId_t, atom*> atom){219 bool AtomOrDescriptor_impl::predicate(std::pair<atomId_t,const atom*> atom) const{ 181 220 return lhs->predicate(atom) || rhs->predicate(atom); 182 221 } … … 198 237 } 199 238 200 bool AtomNotDescriptor_impl::predicate(std::pair<atomId_t, atom*> atom){239 bool AtomNotDescriptor_impl::predicate(std::pair<atomId_t,const atom*> atom) const{ 201 240 return !(arg->predicate(atom)); 202 241 } -
src/Descriptors/AtomDescriptor.hpp
r97445f r795c0f 40 40 // close coupling to the world to allow access 41 41 friend atom* World::getAtom(AtomDescriptor descriptor); 42 friend const atom* World::getAtom(AtomDescriptor descriptor) const; 42 43 friend World::AtomComposite World::getAllAtoms(AtomDescriptor descriptor); 44 friend World::ConstAtomComposite World::getAllAtoms(AtomDescriptor descriptor) const; 43 45 template <class,class,class> friend class SelectiveIterator; 44 46 template <class,class,class> friend class SelectiveConstIterator; … … 49 51 50 52 public: 51 typedef boost::shared_ptr<AtomDescriptor_impl> impl_ptr; //!< Allow easy changes of the pointer-to-implementation type 53 typedef AtomDescriptor_impl impl_t; 54 typedef boost::shared_ptr<impl_t> impl_ptr; //!< Allow easy changes of the pointer-to-implementation type 52 55 53 56 AtomDescriptor(impl_ptr); … … 77 80 * forward Method to implementation 78 81 */ 82 const atom* find() const; 83 84 /** 85 * forward Method to implementation 86 */ 79 87 std::vector<atom*> findAll(); 88 89 /** 90 * forward Method to implementation 91 */ 92 std::vector<const atom*> findAll() const; 80 93 81 94 /** -
src/Descriptors/AtomDescriptor_impl.hpp
r97445f r795c0f 30 30 * Implement this abstract Method to make a concrete AtomDescriptor pick certain Atoms 31 31 */ 32 virtual bool predicate(std::pair<atomId_t, atom*>)=0;32 virtual bool predicate(std::pair<atomId_t,const atom*>) const=0; 33 33 34 34 protected: … … 43 43 44 44 /** 45 * This method is called when the Descriptor is used to find the first matching 46 * Atom. Walks through all Atoms and stops on the first match. Can be implemented 47 * when the searched Atom can be found in a more efficient way. Calculated 48 * Atomdescriptors will always use this method, so no improvement there. 49 */ 50 virtual const atom* find() const; 51 52 /** 45 53 * This method is called when the Descriptor is used to find all matching Atoms. 46 54 * Walks through all Atoms and tests the predicate on each one. A vector of all … … 48 56 */ 49 57 virtual std::vector<atom*> findAll(); 58 59 /** 60 * This method is called when the Descriptor is used to find all matching Atoms. 61 * Walks through all Atoms and tests the predicate on each one. A vector of all 62 * matching Atoms is returned. 63 */ 64 virtual std::vector<const atom*> findAll() const; 50 65 51 66 /** … … 57 72 World::AtomSet& getAtoms(); 58 73 74 /** 75 * This method is used internally to query the Set of Atoms from the world. 76 * By using this method derived classes can also access the Internal World Datastructre. 77 * Implemented in full in the Base Descriptor Implementation, so only this one method 78 * needs to be friend with the World class. 79 */ 80 const World::AtomSet& getAtoms() const; 81 59 82 void checkAndAdd(std::vector<atom*>*,std::pair<atomId_t,atom*>); 83 84 void checkAndAdd(std::vector<const atom*>*,std::pair<atomId_t,const atom*>) const; 60 85 }; 61 86 … … 73 98 * Always returns true for any Atom 74 99 */ 75 virtual bool predicate(std::pair<atomId_t, atom*>);100 virtual bool predicate(std::pair<atomId_t, const atom*>) const; 76 101 }; 77 102 … … 88 113 * Always returns false for any Atom 89 114 */ 90 virtual bool predicate(std::pair<atomId_t, atom*>);115 virtual bool predicate(std::pair<atomId_t,const atom*>)const; 91 116 }; 92 117 … … 106 131 * second Descriptor to decide if an Atom should be selected. 107 132 */ 108 virtual bool predicate(std::pair<atomId_t, atom*>);133 virtual bool predicate(std::pair<atomId_t,const atom*>) const; 109 134 110 135 private: … … 126 151 * second Descriptor to decide if an Atom should be selected. 127 152 */ 128 virtual bool predicate(std::pair<atomId_t, atom*>);153 virtual bool predicate(std::pair<atomId_t,const atom*>) const; 129 154 130 155 private: … … 145 170 * Opposite of the given descriptor predicate. 146 171 */ 147 virtual bool predicate(std::pair<atomId_t, atom*>);172 virtual bool predicate(std::pair<atomId_t,const atom*>) const; 148 173 149 174 private: -
src/Descriptors/AtomIdDescriptor.cpp
r97445f r795c0f 51 51 {} 52 52 53 bool AtomIdDescriptor_impl::predicate(std::pair<atomId_t, atom*> atom){53 bool AtomIdDescriptor_impl::predicate(std::pair<atomId_t,const atom*> atom) const { 54 54 return atom.first==id; 55 55 } … … 65 65 } 66 66 67 const atom *AtomIdDescriptor_impl::find() const { 68 const World::AtomSet &atoms = getAtoms(); 69 World::AtomSet::const_iterator res = atoms.find(id); 70 return (res!=atoms.end())?((*res).second):0; 71 } 72 67 73 vector<atom*> AtomIdDescriptor_impl::findAll(){ 68 74 atom *res = find(); 69 75 return (res)?(vector<atom*>(1,res)):(vector<atom*>()); 70 76 } 77 78 vector<const atom*> AtomIdDescriptor_impl::findAll() const { 79 const atom *res = find(); 80 return (res)?(vector<const atom*>(1,res)):(vector<const atom*>()); 81 } -
src/Descriptors/AtomIdDescriptor_impl.hpp
r97445f r795c0f 16 16 virtual ~AtomIdDescriptor_impl(); 17 17 18 bool predicate(std::pair<atomId_t, atom*> atom);18 bool predicate(std::pair<atomId_t,const atom*> atom) const; 19 19 20 20 protected: 21 21 virtual atom *find(); 22 virtual const atom *find() const; 22 23 virtual std::vector<atom*> findAll(); 24 virtual std::vector<const atom*> findAll() const; 23 25 private: 24 26 atomId_t id; -
src/Descriptors/AtomOfMoleculeDescriptor.cpp
r97445f r795c0f 52 52 {} 53 53 54 bool AtomOfMoleculeDescriptor_impl::predicate(std::pair<atomId_t, atom*> atom)54 bool AtomOfMoleculeDescriptor_impl::predicate(std::pair<atomId_t,const atom*> atom) const 55 55 { 56 56 if (atom.second->getMolecule() == NULL) -
src/Descriptors/AtomOfMoleculeDescriptor_impl.hpp
r97445f r795c0f 16 16 virtual ~AtomOfMoleculeDescriptor_impl(); 17 17 18 bool predicate(std::pair<atomId_t, atom*> atom);18 bool predicate(std::pair<atomId_t,const atom*> atom) const; 19 19 20 20 private: -
src/Descriptors/AtomOfMoleculeSelectionDescriptor.cpp
r97445f r795c0f 47 47 AtomOfMoleculeSelectionDescriptor_impl::~AtomOfMoleculeSelectionDescriptor_impl(){} 48 48 49 bool AtomOfMoleculeSelectionDescriptor_impl::predicate(std::pair<atomId_t, atom*> atom){49 bool AtomOfMoleculeSelectionDescriptor_impl::predicate(std::pair<atomId_t,const atom*> atom) const{ 50 50 return World::getInstance().isSelected(atom.second->getMolecule()); 51 51 } … … 55 55 for (World::MoleculeSet::internal_iterator iter = set.begin_internal(); 56 56 iter != set.end_internal(); 57 ++iter) { 58 if (iter->second->begin() != iter->second->end()) 59 return *(iter->second->begin()); 60 } 61 return 0; 62 } 63 64 const atom* AtomOfMoleculeSelectionDescriptor_impl::find() const { 65 const World::MoleculeSet &set = getSelectedMolecules(); 66 for (World::MoleculeSet::const_iterator iter = set.begin(); 67 iter != set.end(); 57 68 ++iter) { 58 69 if (iter->second->begin() != iter->second->end()) … … 73 84 } 74 85 86 std::vector<const atom*> AtomOfMoleculeSelectionDescriptor_impl::findAll() const{ 87 std::vector<const atom*> res; 88 const World::MoleculeSet &set = getSelectedMolecules(); 89 for (World::MoleculeSet::const_iterator iter = set.begin(); 90 iter != set.end(); 91 ++iter) { 92 std::copy(iter->second->begin(), iter->second->end(), res.begin()); 93 } 94 return res; 95 } 96 75 97 World::MoleculeSet& AtomOfMoleculeSelectionDescriptor_impl::getSelectedMolecules(){ 98 return World::getInstance().selectedMolecules; 99 } 100 101 const World::MoleculeSet& AtomOfMoleculeSelectionDescriptor_impl::getSelectedMolecules() const{ 76 102 return World::getInstance().selectedMolecules; 77 103 } -
src/Descriptors/AtomOfMoleculeSelectionDescriptor_impl.hpp
r97445f r795c0f 21 21 AtomOfMoleculeSelectionDescriptor_impl(); 22 22 virtual ~AtomOfMoleculeSelectionDescriptor_impl(); 23 bool predicate(std::pair<atomId_t, atom*> atom);23 bool predicate(std::pair<atomId_t,const atom*> atom) const; 24 24 protected: 25 25 // need to overide more than the standard methods to make this fast 26 virtual atom* find(); 26 virtual atom *find(); 27 virtual const atom *find() const; 27 28 virtual std::vector<atom*> findAll(); 29 virtual std::vector<const atom*> findAll() const; 28 30 29 31 World::MoleculeSet& getSelectedMolecules(); 32 const World::MoleculeSet& getSelectedMolecules() const; 30 33 }; 31 34 -
src/Descriptors/AtomOrderDescriptor.cpp
r97445f r795c0f 51 51 {} 52 52 53 bool AtomOrderDescriptor_impl::predicate(std::pair<atomId_t, atom*> _atom)53 bool AtomOrderDescriptor_impl::predicate(std::pair<atomId_t,const atom*> _atom) const 54 54 { 55 atom *Walker = find();55 const atom *Walker = find(); 56 56 return (Walker == _atom.second); 57 57 } … … 66 66 } 67 67 68 const World::AtomSet& AtomOrderDescriptor_impl::getAtoms() const 69 { 70 return const_cast<const World &>(World::getInstance()).atoms; 71 } 68 72 69 73 atom *AtomOrderDescriptor_impl::find(){ … … 97 101 } 98 102 103 const atom *AtomOrderDescriptor_impl::find() const { 104 const World::AtomSet &atoms = getAtoms(); 105 106 int i=0; 107 const atom *_atom = NULL; 108 if (id == 0) { 109 return NULL; 110 } else if (id > 0) { 111 World::AtomSet::const_iterator res = atoms.begin(); 112 for (; res != atoms.end(); ++res) { // when iterator is normal, ++ goes forward! 113 ++i; 114 if (id == i) { 115 _atom = res->second; 116 break; 117 } 118 } 119 } else { 120 World::AtomSet::const_reverse_iterator res = atoms.rbegin(); 121 for (; res != atoms.rend(); ++res) { // when iterator is reverse, ++ goes backward! 122 --i; 123 if (id == i) { 124 _atom = res->second; 125 break; 126 } 127 } 128 } 129 130 return _atom; 131 } 132 99 133 vector<atom*> AtomOrderDescriptor_impl::findAll(){ 100 134 atom *res = find(); 101 135 return (res)?(vector<atom*>(1,res)):(vector<atom*>()); 102 136 } 137 138 vector<const atom*> AtomOrderDescriptor_impl::findAll() const { 139 const atom *res = find(); 140 return (res)?(vector<const atom*>(1,res)):(vector<const atom*>()); 141 } -
src/Descriptors/AtomOrderDescriptor_impl.hpp
r97445f r795c0f 16 16 virtual ~AtomOrderDescriptor_impl(); 17 17 18 bool predicate(std::pair<atomId_t, atom*> atom);18 bool predicate(std::pair<atomId_t,const atom*> atom) const; 19 19 20 20 protected: 21 21 virtual atom *find(); 22 virtual const atom *find() const; 22 23 virtual std::vector<atom*> findAll(); 24 virtual std::vector<const atom*> findAll() const; 23 25 24 26 World::AtomSet& getAtoms(); 27 const World::AtomSet& getAtoms() const; 25 28 26 29 private: -
src/Descriptors/AtomSelectionDescriptor.cpp
r97445f r795c0f 44 44 AtomSelectionDescriptor_impl::~AtomSelectionDescriptor_impl(){} 45 45 46 bool AtomSelectionDescriptor_impl::predicate(std::pair<atomId_t, atom*> atom){46 bool AtomSelectionDescriptor_impl::predicate(std::pair<atomId_t,const atom*> atom) const{ 47 47 return getSelectedAtoms().count(atom.first); 48 48 } … … 52 52 World::AtomSet::internal_iterator begin = set.begin_internal(); 53 53 return (begin!=set.end_internal())?(begin->second):0; 54 } 55 56 const atom* AtomSelectionDescriptor_impl::find() const { 57 const World::AtomSet &set = getSelectedAtoms(); 58 const World::AtomSet::const_iterator begin = set.begin(); 59 return (begin!=set.end())?(begin->second):0; 54 60 } 55 61 … … 64 70 } 65 71 72 std::vector<const atom*> AtomSelectionDescriptor_impl::findAll() const { 73 std::vector<const atom*> res; 74 const World::AtomSet &set = getSelectedAtoms(); 75 transform(set.begin(), 76 set.end(), 77 back_inserter(res), 78 _take<atom*,World::AtomSet::value_type>::get); 79 return res; 80 } 81 66 82 World::AtomSet& AtomSelectionDescriptor_impl::getSelectedAtoms(){ 83 return World::getInstance().selectedAtoms; 84 } 85 86 const World::AtomSet& AtomSelectionDescriptor_impl::getSelectedAtoms() const{ 67 87 return World::getInstance().selectedAtoms; 68 88 } -
src/Descriptors/AtomSelectionDescriptor_impl.hpp
r97445f r795c0f 21 21 AtomSelectionDescriptor_impl(); 22 22 virtual ~AtomSelectionDescriptor_impl(); 23 bool predicate(std::pair<atomId_t, atom*> atom);23 bool predicate(std::pair<atomId_t,const atom*> atom) const; 24 24 protected: 25 25 // need to overide more than the standard methods to make this fast 26 virtual atom* find(); 26 virtual atom *find(); 27 virtual const atom *find() const; 27 28 virtual std::vector<atom*> findAll(); 29 virtual std::vector<const atom*> findAll() const; 28 30 29 31 World::AtomSet& getSelectedAtoms(); 32 const World::AtomSet& getSelectedAtoms() const; 30 33 }; 31 34 -
src/Descriptors/AtomShapeDescriptor.cpp
r97445f r795c0f 46 46 AtomShapeDescriptor_impl::~AtomShapeDescriptor_impl(){} 47 47 48 bool AtomShapeDescriptor_impl::predicate(std::pair<atomId_t, atom*> atom){48 bool AtomShapeDescriptor_impl::predicate(std::pair<atomId_t,const atom*> atom) const{ 49 49 return shape.isInside(atom.second->getPosition()); 50 50 } … … 55 55 for (LinkedCell::LinkedList::iterator iter = list.begin(); iter != list.end(); ++iter) { 56 56 atom * const _atom = static_cast<atom *>(const_cast<TesselPoint *>(*iter)); 57 if (shape.isInside(_atom->getPosition())) 58 return _atom; 59 } 60 return NULL; 61 } 62 63 const atom* AtomShapeDescriptor_impl::find() const { 64 LinkedCell::LinkedCell_View view = World::getInstance().getLinkedCell(shape.getRadius()); 65 LinkedCell::LinkedList list = view.getPointsInsideSphere(shape.getRadius(), shape.getCenter()); 66 for (LinkedCell::LinkedList::const_iterator iter = list.begin(); iter != list.end(); ++iter) { 67 const atom * const _atom = static_cast<const atom *>(*iter); 57 68 if (shape.isInside(_atom->getPosition())) 58 69 return _atom; … … 73 84 } 74 85 86 std::vector<const atom*> AtomShapeDescriptor_impl::findAll() const{ 87 LinkedCell::LinkedCell_View view = World::getInstance().getLinkedCell(shape.getRadius()); 88 LinkedCell::LinkedList list = view.getPointsInsideSphere(shape.getRadius(), shape.getCenter()); 89 std::vector<const atom*> res; 90 for (LinkedCell::LinkedList::const_iterator iter = list.begin(); iter != list.end(); ++iter) { 91 const atom * const _atom = static_cast<const atom *>(*iter); 92 if (shape.isInside(_atom->getPosition())) 93 res.push_back(_atom); 94 } 95 return res; 96 } 75 97 76 98 AtomDescriptor AtomsByShape(const Shape &shape){ -
src/Descriptors/AtomShapeDescriptor_impl.hpp
r97445f r795c0f 25 25 virtual ~AtomShapeDescriptor_impl(); 26 26 27 bool predicate(std::pair<atomId_t, atom*> atom);27 bool predicate(std::pair<atomId_t,const atom*> atom) const; 28 28 private: 29 virtual atom* find(); 29 virtual atom *find(); 30 virtual const atom *find() const; 30 31 virtual std::vector<atom*> findAll(); 32 virtual std::vector<const atom*> findAll() const; 31 33 32 34 Shape shape; -
src/Descriptors/AtomTypeDescriptor.cpp
r97445f r795c0f 49 49 {} 50 50 51 bool AtomTypeDescriptor_impl::predicate(std::pair<atomId_t, atom*> atom){51 bool AtomTypeDescriptor_impl::predicate(std::pair<atomId_t,const atom*> atom) const { 52 52 return (atom.second->getType()==type); 53 53 } -
src/Descriptors/AtomTypeDescriptor_impl.hpp
r97445f r795c0f 23 23 virtual ~AtomTypeDescriptor_impl(); 24 24 25 bool predicate(std::pair<atomId_t, atom*> atom);25 bool predicate(std::pair<atomId_t,const atom*> atom) const; 26 26 private: 27 27 const element * const type; -
src/Descriptors/AtomsWithinDistanceOfDescriptor.cpp
r97445f r795c0f 54 54 {} 55 55 56 bool AtomsWithinDistanceOfDescriptor_impl::predicate(std::pair<atomId_t, atom*> atom)56 bool AtomsWithinDistanceOfDescriptor_impl::predicate(std::pair<atomId_t,const atom*> atom) const 57 57 { 58 58 return ((atom.second->getPosition().DistanceSquared(position) - distanceSquared) <= 0); … … 63 63 LinkedCell::LinkedList list = view.getPointsInsideSphere(distance, position); 64 64 return (list.begin()!=list.end())? static_cast<atom *>(const_cast<TesselPoint *>(*list.begin())):0; 65 } 66 67 const atom* AtomsWithinDistanceOfDescriptor_impl::find() const{ 68 LinkedCell::LinkedCell_View view = World::getInstance().getLinkedCell(distance); 69 LinkedCell::LinkedList list = view.getPointsInsideSphere(distance, position); 70 return (list.begin()!=list.end())? static_cast<const atom *>(*list.begin()):0; 65 71 } 66 72 … … 74 80 } 75 81 82 std::vector<const atom*> AtomsWithinDistanceOfDescriptor_impl::findAll() const { 83 LinkedCell::LinkedCell_View view = World::getInstance().getLinkedCell(distance); 84 LinkedCell::LinkedList list = view.getPointsInsideSphere(distance, position); 85 std::vector<const atom*> res; 86 for (LinkedCell::LinkedList::iterator iter = list.begin(); iter != list.end(); ++iter) 87 res.push_back(static_cast<const atom *>(*iter)); 88 return res; 89 } 90 76 91 AtomDescriptor AtomsWithinDistanceOf(const double distance, const Vector &position) 77 92 { -
src/Descriptors/AtomsWithinDistanceOfDescriptor_impl.hpp
r97445f r795c0f 17 17 virtual ~AtomsWithinDistanceOfDescriptor_impl(); 18 18 19 bool predicate(std::pair<atomId_t, atom*> atom);19 bool predicate(std::pair<atomId_t,const atom*> atom) const; 20 20 21 21 protected: 22 22 // need to overide more than the standard methods to make this fast 23 virtual atom* find(); 23 virtual atom *find(); 24 virtual const atom *find() const; 24 25 virtual std::vector<atom*> findAll(); 26 virtual std::vector<const atom*> findAll() const; 25 27 26 28 private: -
src/Descriptors/DescriptorBase.hpp
r97445f r795c0f 51 51 public: 52 52 typedef _Target Target; 53 typedef const _Target ConstTarget; 53 54 typedef std::vector<Target> TargetVec; 55 typedef std::vector<ConstTarget> ConstTargetVec; 54 56 55 57 protected: … … 78 80 * forward Method to implementation 79 81 */ 82 ConstTarget find(Container&) const; 83 84 /** 85 * forward Method to implementation 86 */ 80 87 TargetVec findAll(Container&); 81 88 89 /** 90 * forward Method to implementation 91 */ 92 ConstTargetVec findAll(Container&) const; 82 93 83 94 private: -
src/Descriptors/DescriptorBase_impl.hpp
r97445f r795c0f 24 24 public: 25 25 typedef _Target Target; 26 typedef const _Target ConstTarget; 26 27 typedef std::vector<Target> TargetVec; 28 typedef std::vector<ConstTarget> ConstTargetVec; 27 29 typedef _Container Container; 28 30 typedef typename Container::value_type value_type; 31 typedef const typename Container::value_type const_value_type; 29 32 typedef typename Container::iterator iterator; 33 typedef typename Container::const_iterator const_iterator; 30 34 31 35 DescriptorBase_impl(); 32 ~DescriptorBase_impl();36 virtual ~DescriptorBase_impl(); 33 37 34 38 virtual bool predicate(value_type)=0; 35 39 36 40 virtual Target find(Container&); 41 virtual ConstTarget find(Container&) const; 37 42 virtual TargetVec findAll(Container&); 43 virtual ConstTargetVec findAll(Container&) const; 38 44 protected: 39 45 const _take<Target,value_type> take; … … 56 62 boost::bind(&DescriptorBase_impl<_Target,_Container>::predicate,this,_1)); 57 63 return (res!=container.end())?(take(*res)):0; 58 } 64 } 65 66 template<class _Target, 67 class _Container> 68 typename DescriptorBase_impl<_Target,_Container>::ConstTarget 69 DescriptorBase_impl<_Target,_Container>::find(DescriptorBase_impl<_Target,_Container>::Container& container) const{ 70 const_iterator res = find_if(container.begin(), 71 container.end(), 72 boost::bind(&DescriptorBase_impl<_Target,_Container>::predicate,this,_1)); 73 return (res!=container.end())?(take(*res)):0; 74 } 59 75 60 76 template<class _Target, … … 72 88 } 73 89 90 template<class _Target, 91 class _Container> 92 typename DescriptorBase_impl<_Target,_Container>::ConstTargetVec 93 DescriptorBase_impl<_Target,_Container>::findAll(DescriptorBase_impl<_Target,_Container>::Container& container) const { 94 ConstTargetVec res; 95 const_iterator iter; 96 for(iter=container.begin();iter!=container.end();++iter) { 97 if(predicate(*iter)){ 98 res.push_back(take(*iter)); 99 } 100 } 101 return res; 102 } 103 74 104 #endif /* DESCRIPTORBASE_IMPL_HPP_ */ -
src/World.cpp
r97445f r795c0f 127 127 } 128 128 129 const atom* World::getAtom(AtomDescriptor descriptor) const{ 130 return const_cast<const AtomDescriptor &>(descriptor).find(); 131 } 132 129 133 World::AtomComposite World::getAllAtoms(AtomDescriptor descriptor){ 130 134 return descriptor.findAll(); 131 135 } 132 136 137 World::ConstAtomComposite World::getAllAtoms(AtomDescriptor descriptor) const { 138 return const_cast<const AtomDescriptor &>(descriptor).findAll(); 139 } 140 133 141 World::AtomComposite World::getAllAtoms(){ 134 142 return getAllAtoms(AllAtoms()); 135 143 } 136 144 137 int World::numAtoms(){ 145 World::ConstAtomComposite World::getAllAtoms() const { 146 return getAllAtoms(AllAtoms()); 147 } 148 149 int World::numAtoms() const { 138 150 return atoms.size(); 139 151 } -
src/World.hpp
r97445f r795c0f 109 109 110 110 typedef ATOMSET(std::vector) AtomComposite; 111 typedef CONSTATOMSET(std::vector) ConstAtomComposite; 111 112 112 113 /******* Notifications *******/ … … 176 177 177 178 /** 179 * returns the first atom that matches a given descriptor. 180 * Do not rely on ordering for descriptors that match more than one atom. 181 */ 182 const atom* getAtom(AtomDescriptor descriptor) const; 183 184 /** 178 185 * returns a vector containing all atoms that match a given descriptor 179 186 */ 180 187 AtomComposite getAllAtoms(AtomDescriptor descriptor); 188 189 /** 190 * returns a vector containing all atoms that match a given descriptor 191 */ 192 ConstAtomComposite getAllAtoms(AtomDescriptor descriptor) const; 193 194 /** 195 * returns a vector containing all atoms that match a given descriptor 196 */ 181 197 AtomComposite getAllAtoms(); 198 199 /** 200 * returns a vector containing all atoms that match a given descriptor 201 */ 202 ConstAtomComposite getAllAtoms() const; 182 203 183 204 /** … … 192 213 * get the number of atoms in the World 193 214 */ 194 int numAtoms() ;215 int numAtoms() const; 195 216 196 217 /**
Note:
See TracChangeset
for help on using the changeset viewer.
