Changeset 1d5a871 for src/RandomNumbers/RandomNumberDistributionFactory.cpp
- Timestamp:
- Feb 3, 2011, 9:51:19 AM (15 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:
- 076a77
- Parents:
- c9bc2b7
- git-author:
- Frederik Heber <heber@…> (01/04/11 12:09:44)
- git-committer:
- Frederik Heber <heber@…> (02/03/11 09:51:19)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/RandomNumbers/RandomNumberDistributionFactory.cpp
rc9bc2b7 r1d5a871 10 10 * 11 11 * Created on: Jan 03, 2011 12 *Author: heber12 Author: heber 13 13 */ 14 14 … … 41 41 #include <boost/random/uniform_smallint.hpp> 42 42 43 #include <boost/preprocessor/facilities/empty.hpp>44 #include <boost/preprocessor/punctuation/paren.hpp>45 46 #include "TemplatePowerSetGenerator.hpp"47 #include "EmptyPrototypeTable.hpp"48 49 43 #include "RandomNumberDistribution_Encapsulation.hpp" 50 44 51 45 #include "RandomNumberDistributionFactory.hpp" 46 47 // has to be included BEFORE Factory_impl.hpp! 52 48 #include "RandomNumberDistributionFactory.def" 49 #include "CodePatterns/Factory_impl.hpp" 53 50 54 //enum RandomNumberDistributionFactory::Distribution RandomNumberDistributionFactory::distribution = (enum RandomNumberDistributionFactory::Distribution) 0; 55 RandomNumberDistributionFactory::DistributionMap RandomNumberDistributionFactory::distributions; 56 RandomNumberDistributionFactory::DistributionNamesMap RandomNumberDistributionFactory::distributionNames; 57 RandomNumberDistributionFactory::DistributionTable RandomNumberDistributionFactory::DistributionPrototypeTable; 58 59 60 RandomNumberDistributionFactory::RandomNumberDistributionFactory() 61 { 62 FillEnumTable(); 63 FillPrototypeTable(); 64 } 65 66 RandomNumberDistributionFactory::~RandomNumberDistributionFactory() 67 { 68 // clear out factories map to allow boost::shared_ptr to do their work (i.e. to release mem) 69 // this is necessary as factories is a object 70 distributions.clear(); 71 distributionNames.clear(); 72 EmptyPrototypeTable<DistributionTable> (DistributionPrototypeTable); 73 } 74 75 void RandomNumberDistributionFactory::FillEnumTable() 76 { 77 // insert all known distributions 78 #define BOOST_PP_LOCAL_MACRO(n) seqitems_as_string_enum_map(~, n, distribution_seq, distributions) 79 #define BOOST_PP_LOCAL_LIMITS (0, BOOST_PP_SEQ_SIZE(distribution_seq)-1 ) 80 #include BOOST_PP_LOCAL_ITERATE() 81 for (DistributionMap::const_iterator iter = distributions.begin(); 82 iter != distributions.end(); 83 ++iter) { 84 distributionNames.insert(make_pair(iter->second, iter->first)); 85 } 86 } 87 88 void RandomNumberDistributionFactory::FillPrototypeTable() 89 { 90 // fill DistributionPrototypeTable 91 #define BOOST_PP_LOCAL_MACRO(n) seqitems_as_enum_key_map(~, n, distribution_seq, DistributionPrototypeTable, new RandomNumberDistribution_Creator< RandomNumberDistribution_Encapsulation, boost::, <> > ) 92 #define BOOST_PP_LOCAL_LIMITS (0, BOOST_PP_SEQ_SIZE(distribution_seq)-1 ) 93 #include BOOST_PP_LOCAL_ITERATE() 94 } 95 96 RandomNumberDistribution* RandomNumberDistributionFactory::getDistribution(enum Distribution distribution_type) const 97 { 98 return DistributionPrototypeTable[distribution_type]->create(); 99 } 100 101 RandomNumberDistribution* RandomNumberDistributionFactory::getDistribution(const std::string distribution_name) const 102 { 103 ASSERT(distributions.count(distribution_name) != 0, 104 "RandomNumberDistributionFactory::getDistribution() - distribution "+distribution_name+" is not registered."); 105 return DistributionPrototypeTable[ distributions[distribution_name] ]->create(); 106 } 107 108 const std::string &RandomNumberDistributionFactory::getName(enum Distribution distribution_type) const 109 { 110 return distributionNames[distribution_type]; 111 } 112 113 enum RandomNumberDistributionFactory::Distribution RandomNumberDistributionFactory::getEnum(const std::string distribution_name) const 114 { 115 ASSERT(distributions.count(distribution_name) != 0, 116 "RandomNumberDistributionFactory::getEnum() - distribution "+distribution_name+" is not registered."); 117 return distributions[distribution_name]; 118 } 51 RandomNumberDistributionFactory::RandomNumberDistributionFactory() {} 52 RandomNumberDistributionFactory::~RandomNumberDistributionFactory() {} 119 53 120 54 CONSTRUCT_SINGLETON(RandomNumberDistributionFactory) 55 CONSTRUCT_FACTORY(RandomNumberDistribution) 121 56 122 57 #include "RandomNumberDistributionFactory.undef"
Note:
See TracChangeset
for help on using the changeset viewer.
