Changeset e4afb4 for src/Patterns
- Timestamp:
- Oct 30, 2010, 8:42:44 PM (14 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, 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:
- 76cec6, c38826
- Parents:
- 23359f
- git-author:
- Frederik Heber <heber@…> (10/30/10 19:55:54)
- git-committer:
- Frederik Heber <heber@…> (10/30/10 20:42:44)
- Location:
- src/Patterns
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Patterns/Registry.hpp
r23359f re4afb4 2 2 * Registry.hpp 3 3 * 4 * Based on Registry<Action>by Till Crueger.4 * Based on initial ActionRegistry code by Till Crueger. 5 5 * 6 6 * The registry pattern is basically just a singleton map, wherein instantiations … … 21 21 * <h1> Registry Howto </h1> 22 22 * 23 * The registry is a class where instances of other classes are stored and be retrieved24 * when desired. For this purpose a registry should always be a singleton (i.e. use both25 * this registry and the singleton pattern to declare a registry class). It basically26 * is simply a singleton container of a map, where the pointers to the class instances are27 * stored by a string key and can be retrieved thereby.23 * The Registry is a class where instances of other classes are stored and be retrieved 24 * by a string token when desired. For this purpose a Registry should always be a singleton 25 * (i.e. use both this Registry and the Singleton pattern to declare a Registry class). It 26 * basically is simply a singleton container of a map, where the pointers to the class 27 * instances are stored by a string key and can be retrieved thereby. 28 28 * 29 * The available functions are, if your class to be stored in registry is foo : 29 * The available functions are as follows if your class instances to be stored in Registry 30 * are of type 'foo': 30 31 * 31 32 * - <code>foo* Registry<foo>::getByName()</code> : returns the instance of a specific … … 58 59 ~Registry(); 59 60 60 T* getByName(const std::string name); 61 bool isPresentByName(const std::string name); 61 typedef typename std::map<const std::string,T*> instance_map; 62 typedef typename std::map<const std::string,T*>::iterator iterator; 63 typedef typename std::map<const std::string,T*>::const_iterator const_iterator; 64 65 T* getByName(const std::string name) const; 66 bool isPresentByName(const std::string name) const; 62 67 void registerInstance(T*); 63 68 void unregisterInstance(T*); 64 69 void cleanup(); 65 70 66 typename std::map<const std::string,T*>::iterator getBeginIter();67 typename std::map<const std::string,T*>::const_iterator getBeginIter() const;68 typename std::map<const std::string,T*>::iterator getEndIter();69 typename std::map<const std::string,T*>::const_iterator getEndIter() const;71 iterator getBeginIter(); 72 const_iterator getBeginIter() const; 73 iterator getEndIter(); 74 const_iterator getEndIter() const; 70 75 71 76 private: 72 typename std::map<const std::string,T*>InstanceMap;77 instance_map InstanceMap; 73 78 }; 74 79 -
src/Patterns/Registry_impl.hpp
r23359f re4afb4 15 15 16 16 #include "Helpers/Assert.hpp" 17 #include <ios fwd>17 #include <iostream> 18 18 19 19 /** Constructor for class Registry. … … 31 31 * \return pointer to instance 32 32 */ 33 template <class T> T* Registry<T>::getByName(const std::string name){ 34 typename std::map<const std::string,T*>::iterator iter; 33 template <class T> T* Registry<T>::getByName(const std::string name) const 34 { 35 typename std::map<const std::string,T*>::const_iterator iter; 35 36 iter = InstanceMap.find(name); 36 37 ASSERT(iter!=InstanceMap.end(),"Query for an instance not stored in registry"); … … 41 42 * \note This is needed as Registry<T>::getByName() ASSERT()s that instance is in std::map. 42 43 * \param name name of instance 43 * \return true - vpresent, false - instance absent44 * \return true - present, false - instance absent 44 45 */ 45 template <class T>bool Registry<T>::isPresentByName(const std::string name){ 46 typename std::map<const std::string,T*>::iterator iter; 46 template <class T>bool Registry<T>::isPresentByName(const std::string name) const 47 { 48 typename std::map<const std::string,T*>::const_iterator iter; 47 49 iter = InstanceMap.find(name); 48 50 return iter!=InstanceMap.end(); … … 54 56 template <class T>void Registry<T>::registerInstance(T* instance){ 55 57 std::pair<typename std::map<const std::string,T*>::iterator,bool> ret; 56 // cout << "Trying to register instance with name " << instance->getName() << "." <<endl;58 //std::cout << "Trying to register instance of type " << typeid(T).name() << " with name " << instance->getName() << "." << std::endl; 57 59 ret = InstanceMap.insert(typename std::pair<const std::string,T*>(instance->getName(),instance)); 58 60 ASSERT(ret.second,"Two instances with the same name added to registry"); … … 63 65 */ 64 66 template <class T>void Registry<T>::unregisterInstance(T* instance){ 65 // cout << "Unregistering instance with name " << instance->getName() << "." <<endl;67 //std::cout << "Unregistering instance of type " << typeid(T).name() << " with name " << instance->getName() << "." << std::endl; 66 68 InstanceMap.erase(instance->getName()); 67 69 } … … 134 136 * at a chosen place. 135 137 */ 136 #define CONSTRUCT_REGISTRY( name) \137 template name* Registry<name>::getByName(const std::string name); \138 template bool Registry< name>::isPresentByName(const std::string name); \139 template void Registry< name>::registerInstance(name*); \140 template void Registry< name>::unregisterInstance(name*); \141 template std::map<const std::string, name*>::iterator Registry<name>::getBeginIter(); \142 template std::map<const std::string, name*>::const_iterator Registry<name>::getBeginIter() const; \143 template std::map<const std::string, name*>::iterator Registry<name>::getEndIter(); \144 template std::map<const std::string, name*>::const_iterator Registry<name>::getEndIter() const;138 #define CONSTRUCT_REGISTRY(InstanceType) \ 139 template InstanceType* Registry<InstanceType>::getByName(const std::string) const; \ 140 template bool Registry<InstanceType>::isPresentByName(const std::string) const; \ 141 template void Registry<InstanceType>::registerInstance(InstanceType*); \ 142 template void Registry<InstanceType>::unregisterInstance(InstanceType*); \ 143 template std::map<const std::string,InstanceType*>::iterator Registry<InstanceType>::getBeginIter(); \ 144 template std::map<const std::string,InstanceType*>::const_iterator Registry<InstanceType>::getBeginIter() const; \ 145 template std::map<const std::string,InstanceType*>::iterator Registry<InstanceType>::getEndIter(); \ 146 template std::map<const std::string,InstanceType*>::const_iterator Registry<InstanceType>::getEndIter() const; 145 147 146 148
Note:
See TracChangeset
for help on using the changeset viewer.