Changeset 0275ad for src/RandomNumbers
- Timestamp:
- Feb 3, 2011, 9:59:57 AM (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:
- 9964ff, c14c78
- Parents:
- 1ee3b8d
- git-author:
- Frederik Heber <heber@…> (01/07/11 00:15:49)
- git-committer:
- Frederik Heber <heber@…> (02/03/11 09:59:57)
- Location:
- src/RandomNumbers
- Files:
-
- 4 added
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
src/RandomNumbers/Makefile.am
r1ee3b8d r0275ad 10 10 RANDOMSOURCE = \ 11 11 RandomNumberDistribution_Encapsulation.cpp \ 12 RandomNumberDistribution_Parameters.cpp \ 12 13 RandomNumberDistributionFactory.cpp \ 13 14 RandomNumberEngine_Encapsulation.cpp \ 15 RandomNumberEngine_Parameters.cpp \ 14 16 RandomNumberEngineFactory.cpp \ 15 17 RandomNumberGenerator.cpp \ … … 20 22 RANDOMHEADER = \ 21 23 RandomNumberDistribution.hpp \ 24 RandomNumberDistribution_Parameters.hpp \ 22 25 RandomNumberDistribution_Encapsulation.hpp \ 23 26 RandomNumberDistributionFactory.hpp \ 24 27 RandomNumberEngine.hpp \ 25 28 RandomNumberEngine_Encapsulation.hpp \ 29 RandomNumberEngine_Parameters.hpp \ 26 30 RandomNumberEngineFactory.hpp \ 27 31 RandomNumberGenerator.hpp \ -
src/RandomNumbers/RandomNumberDistribution.hpp
r1ee3b8d r0275ad 16 16 class RandomNumberDistributionFactoryTest; 17 17 class RandomNumberGenerator; 18 class RandomNumberDistribution_Parameters; 18 19 19 20 /** Abstract base class for a random number distribution. … … 37 38 38 39 public: 39 /** Getter for smallest value the engine produces. 40 /** Getter for the whole set of possible parameters. 41 * 42 * @return filled instance of RandomNumberDistribution_Parameters 43 */ 44 virtual RandomNumberDistribution_Parameters* getParameterSet() const=0; 45 46 /** Getter for smallest value the uniform_... engines produces. 40 47 * 41 48 * @return smallest value … … 43 50 virtual double min() const=0; 44 51 45 /** Getter for largest value the engineproduces.52 /** Getter for largest value the uniform_... engines produces. 46 53 * 47 54 * @return largest value … … 56 63 virtual double p() const=0; 57 64 65 /** Getter for binomial_distribution's parameter t. 66 * 67 * @return t 68 */ 69 virtual double t() const=0; 70 71 /** Getter for cauchy_distribution parameter median. 72 * 73 * @return median 74 */ 75 virtual double median() const=0; 76 77 /** Getter for cauchy_distribution parameter sigma. 78 * 79 * @return sigma 80 */ 81 virtual double sigma() const=0; 82 83 /** Getter for gamma_distribution parameter alpha. 84 * 85 * @return alpha 86 */ 87 virtual double alpha() const=0; 88 89 /** Getter for poisson_distribution's parameter mean. 90 * 91 * @return mean 92 */ 93 virtual double mean() const=0; 94 95 /** Getter for triangle_distribution parameter a. 96 * 97 * @return a 98 */ 99 virtual double a() const=0; 100 101 /** Getter for triangle_distribution parameter b. 102 * 103 * @return b 104 */ 105 virtual double b() const=0; 106 107 /** Getter for triangle_distribution parameter c. 108 * 109 * @return c 110 */ 111 virtual double c() const=0; 112 113 /** Getter for exponential_distribution parameter lambda. 114 * 115 * @return lambda 116 */ 117 virtual double lambda() const=0; 118 58 119 /** Getter for the type name of the internal distribution. 59 120 * 121 * @return name of distribution 60 122 */ 61 123 virtual std::string name()=0; -
src/RandomNumbers/RandomNumberDistributionFactory.cpp
r1ee3b8d r0275ad 42 42 43 43 #include "RandomNumberDistribution_Encapsulation.hpp" 44 #include "RandomNumberDistribution_Parameters.hpp" 44 45 45 46 #include "RandomNumberDistributionFactory.hpp" … … 47 48 // has to be included BEFORE PrototypeFactory_impl.hpp! 48 49 #include "RandomNumberDistributionFactory.def" 49 #include "CodePatterns/ PrototypeFactory_impl.hpp"50 #include "CodePatterns/ManipulablePrototypeFactory_impl.hpp" 50 51 51 52 RandomNumberDistributionFactory::RandomNumberDistributionFactory() … … 60 61 61 62 CONSTRUCT_SINGLETON(RandomNumberDistributionFactory) 62 CONSTRUCT_ PROTOTYPEFACTORY(RandomNumberDistribution)63 CONSTRUCT_MANIPULABLEPROTOTYPEFACTORY(RandomNumberDistribution, RandomNumberDistribution_Parameters) 63 64 64 65 #include "RandomNumberDistributionFactory.undef" -
src/RandomNumbers/RandomNumberDistributionFactory.def
r1ee3b8d r0275ad 25 25 #define FactoryNAME RandomNumberDistributionFactory 26 26 #define Abstract_Interface_Class RandomNumberDistribution 27 #define Abstract_Parameter_Class RandomNumberDistribution_Parameters 27 28 #define Abstract_Encapsulation_Class RandomNumberDistribution_Encapsulation 28 29 #define type_name_space boost:: -
src/RandomNumbers/RandomNumberDistributionFactory.hpp
r1ee3b8d r0275ad 21 21 #include "RandomNumberDistributionFactory.undef" 22 22 23 #include "CodePatterns/ PrototypeFactory.hpp"23 #include "CodePatterns/ManipulablePrototypeFactory.hpp" 24 24 25 25 #include <map> 26 26 27 27 class RandomNumberDistribution; 28 class RandomNumberDistribution_Parameters; 28 29 class RandomNumberDistributionFactoryUnitTest; 30 class CommandSetRandomNumbersDistributionAction; 29 31 30 32 /** This is the abstract factory class for random number distributions. … … 39 41 class RandomNumberDistributionFactory : 40 42 public Singleton<RandomNumberDistributionFactory>, 41 public PrototypeFactory<RandomNumberDistribution>43 public ManipulablePrototypeFactory<RandomNumberDistribution, RandomNumberDistribution_Parameters> 42 44 { 43 45 friend class Singleton<RandomNumberDistributionFactory>; 44 46 friend class RandomNumberDistributionFactoryTest; 47 friend class CommandSetRandomNumbersDistributionAction; 45 48 46 49 protected: -
src/RandomNumbers/RandomNumberDistributionFactory.undef
r1ee3b8d r0275ad 5 5 #undef FactoryNAME 6 6 #undef Abstract_Interface_Class 7 #undef Abstract_Parameter_Class 7 8 #undef Abstract_Encapsulation_Class 8 9 #undef type_name_space -
src/RandomNumbers/RandomNumberDistribution_Encapsulation.cpp
r1ee3b8d r0275ad 24 24 #include "RandomNumberDistribution_Encapsulation.hpp" 25 25 26 /* ========= manipulatedclone() ================ */ 27 28 template <> 29 RandomNumberDistribution_Encapsulation< boost::uniform_smallint<> >:: 30 RandomNumberDistribution_Encapsulation (const RandomNumberDistribution_Parameters&_params) : 31 distribution_type(_params.min, _params.max) 32 {} 33 34 template <> 35 RandomNumberDistribution_Encapsulation< boost::uniform_int<> >:: 36 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 37 distribution_type(_params.min, _params.max) 38 {} 39 40 template <> 41 RandomNumberDistribution_Encapsulation< boost::uniform_real<> >:: 42 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 43 distribution_type(_params.min, _params.max) 44 {} 45 46 template <> 47 RandomNumberDistribution_Encapsulation< boost::bernoulli_distribution<> >:: 48 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 49 distribution_type(_params.p) 50 {} 51 52 template <> 53 RandomNumberDistribution_Encapsulation< boost::binomial_distribution<> >:: 54 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 55 distribution_type((int)_params.t, _params.p) 56 {} 57 58 template <> 59 RandomNumberDistribution_Encapsulation< boost::cauchy_distribution<> >:: 60 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 61 distribution_type(_params.median, _params.sigma) 62 {} 63 64 template <> 65 RandomNumberDistribution_Encapsulation< boost::gamma_distribution<> >:: 66 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 67 distribution_type(_params.alpha) 68 {} 69 70 template <> 71 RandomNumberDistribution_Encapsulation< boost::poisson_distribution<> >:: 72 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 73 distribution_type(_params.mean) 74 {} 75 76 template <> 77 RandomNumberDistribution_Encapsulation< boost::geometric_distribution<> >:: 78 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 79 distribution_type(_params.p) 80 {} 81 82 template <> 83 RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >:: 84 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 85 distribution_type(_params.a, _params.b, _params.c) 86 {} 87 88 template <> 89 RandomNumberDistribution_Encapsulation< boost::exponential_distribution<> >:: 90 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 91 distribution_type(_params.lambda) 92 {} 93 94 template <> 95 RandomNumberDistribution_Encapsulation< boost::normal_distribution<> >:: 96 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 97 distribution_type(_params.mean, _params.sigma) 98 {} 99 100 template <> 101 RandomNumberDistribution_Encapsulation< boost::lognormal_distribution<> >:: 102 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) : 103 distribution_type(_params.mean, _params.sigma) 104 {} 26 105 27 106 /* =============== min() ======================= */ -
src/RandomNumbers/RandomNumberDistribution_Encapsulation.hpp
r1ee3b8d r0275ad 37 37 #include <boost/random/uniform_smallint.hpp> 38 38 39 #include "CodePatterns/ Clone.hpp"39 #include "CodePatterns/ManipulableClone.hpp" 40 40 #include "RandomNumberDistribution.hpp" 41 42 #include "RandomNumberDistribution_Parameters.hpp" 41 43 42 44 class RandomNumberDistributionFactory; … … 52 54 class RandomNumberDistribution_Encapsulation : 53 55 public RandomNumberDistribution, 54 public Clone<RandomNumberDistribution>56 public ManipulableClone<RandomNumberDistribution, RandomNumberDistribution_Parameters> 55 57 { 56 58 /** … … 61 63 62 64 public: 63 64 /** Getter for smallest value the engine produces. 65 /** Getter for the whole set of possible parameters. 66 * 67 * @return filled instance of RandomNumberDistribution_Parameters 68 */ 69 RandomNumberDistribution_Parameters* getParameterSet() const 70 { 71 RandomNumberDistribution_Parameters *params = new RandomNumberDistribution_Parameters(); 72 params->getParameters(this); 73 return params; 74 } 75 76 /** Getter for smallest value the uniform_... engines produces. 65 77 * 66 78 * @return smallest value 67 79 */ 68 80 double min() const { 69 ASSERT(0, "min() not implemented for "+name()); 70 return -1.; 71 } 72 73 /** Getter for largest value the engine produces. 81 return RandomNumberDistribution_Parameters::noset_value; 82 } 83 84 /** Getter for largest value the uniform_... engines produces. 74 85 * 75 86 * @return largest value 76 87 */ 77 88 double max() const { 78 ASSERT(0, "max() not implemented for "+name()); 79 return -1.; 89 return RandomNumberDistribution_Parameters::noset_value; 80 90 } 81 91 … … 85 95 */ 86 96 double p() const { 87 ASSERT(0, "p() not implemented for "+name()); 88 return -1.; 97 return RandomNumberDistribution_Parameters::noset_value; 89 98 } 90 99 … … 94 103 */ 95 104 double t() const { 96 ASSERT(0, "t() not implemented for "+name()); 97 return -1.; 105 return RandomNumberDistribution_Parameters::noset_value; 98 106 } 99 107 … … 103 111 */ 104 112 double median() const { 105 ASSERT(0, "median() not implemented for "+name()); 106 return -1.; 113 return RandomNumberDistribution_Parameters::noset_value; 107 114 } 108 115 … … 112 119 */ 113 120 double sigma() const { 114 ASSERT(0, "sigma() not implemented for "+name()); 115 return -1.; 121 return RandomNumberDistribution_Parameters::noset_value; 116 122 } 117 123 … … 121 127 */ 122 128 double alpha() const { 123 ASSERT(0, "alpha() not implemented for "+name()); 124 return -1.; 129 return RandomNumberDistribution_Parameters::noset_value; 125 130 } 126 131 … … 130 135 */ 131 136 double mean() const { 132 ASSERT(0, "mean() not implemented for "+name()); 133 return -1.; 137 return RandomNumberDistribution_Parameters::noset_value; 134 138 } 135 139 … … 139 143 */ 140 144 double a() const { 141 ASSERT(0, "a() not implemented for "+name()); 142 return -1.; 145 return RandomNumberDistribution_Parameters::noset_value; 143 146 } 144 147 … … 148 151 */ 149 152 double b() const { 150 ASSERT(0, "b() not implemented for "+name()); 151 return -1.; 153 return RandomNumberDistribution_Parameters::noset_value; 152 154 } 153 155 … … 157 159 */ 158 160 double c() const { 159 ASSERT(0, "c() not implemented for "+name()); 160 return -1.; 161 return RandomNumberDistribution_Parameters::noset_value; 161 162 } 162 163 … … 166 167 */ 167 168 double lambda() const { 168 ASSERT(0, "lambda() not implemented for "+name()); 169 return -1.; 169 return RandomNumberDistribution_Parameters::noset_value; 170 170 } 171 171 … … 193 193 RandomNumberDistribution* clone() const { 194 194 RandomNumberDistribution* MyClone = NULL; 195 MyClone = new RandomNumberDistribution_Encapsulation<distribution>(); 195 RandomNumberDistribution_Parameters *params = getParameterSet(); 196 MyClone = new RandomNumberDistribution_Encapsulation<distribution>(*params); 197 delete params; 196 198 return MyClone; 199 } 200 201 /** Clones and manipulates the current instance. 202 * 203 * Implementation of ManipulableClone pattern. 204 * 205 * @param _params set of parameters to instantiate manipulated clone with 206 * @return interface reference to cloned&manipulated instance 207 */ 208 ManipulableClone<RandomNumberDistribution, RandomNumberDistribution_Parameters>* 209 manipulatedclone(const RandomNumberDistribution_Parameters&_params) const 210 { 211 RandomNumberDistribution_Encapsulation<distribution>* newproto = 212 new RandomNumberDistribution_Encapsulation<distribution>(_params); 213 return newproto; 197 214 } 198 215 … … 205 222 {} 206 223 224 /** Constructor that instantiates a specific random number generator and 225 * distribution. 226 * 227 * @param _params set of parameters to instantiate manipulated clone with 228 * @param _distribution_type instance of the desired distribution 229 */ 230 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) 231 {} 232 207 233 /** Destructor of the class. 208 234 * … … 216 242 // template member functions for the desired cases. 217 243 244 /* ========= manipulatedclone() ================ */ 245 246 template <> 247 RandomNumberDistribution_Encapsulation< boost::uniform_smallint<> >:: 248 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 249 250 template <> 251 RandomNumberDistribution_Encapsulation< boost::uniform_int<> >:: 252 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 253 254 template <> 255 RandomNumberDistribution_Encapsulation< boost::uniform_real<> >:: 256 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 257 258 template <> 259 RandomNumberDistribution_Encapsulation< boost::bernoulli_distribution<> >:: 260 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 261 262 template <> 263 RandomNumberDistribution_Encapsulation< boost::binomial_distribution<> >:: 264 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 265 266 template <> 267 RandomNumberDistribution_Encapsulation< boost::cauchy_distribution<> >:: 268 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 269 270 template <> 271 RandomNumberDistribution_Encapsulation< boost::gamma_distribution<> >:: 272 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 273 274 template <> 275 RandomNumberDistribution_Encapsulation< boost::poisson_distribution<> >:: 276 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 277 278 template <> 279 RandomNumberDistribution_Encapsulation< boost::geometric_distribution<> >:: 280 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 281 282 template <> 283 RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >:: 284 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 285 286 template <> 287 RandomNumberDistribution_Encapsulation< boost::exponential_distribution<> >:: 288 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 289 290 template <> 291 RandomNumberDistribution_Encapsulation< boost::normal_distribution<> >:: 292 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 293 294 template <> 295 RandomNumberDistribution_Encapsulation< boost::lognormal_distribution<> >:: 296 RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params); 297 218 298 /* =============== min() ======================= */ 219 299 -
src/RandomNumbers/RandomNumberEngine.hpp
r1ee3b8d r0275ad 16 16 class RandomNumberEngineFactoryTest; 17 17 class RandomNumberGenerator; 18 class RandomNumberEngine_Parameters; 18 19 19 20 /** Abstract base class for a random number engine. … … 37 38 38 39 public: 40 /** Getter for the whole set of possible parameters. 41 * 42 * @return filled instance of RandomNumberEngine_Parameters 43 */ 44 virtual RandomNumberEngine_Parameters* getParameterSet() const=0; 45 39 46 /** Set the generator's seed. 40 47 * -
src/RandomNumbers/RandomNumberEngineFactory.cpp
r1ee3b8d r0275ad 40 40 41 41 #include "RandomNumberEngine_Encapsulation.hpp" 42 #include "RandomNumberEngine_Parameters.hpp" 42 43 43 44 #include "RandomNumberEngineFactory.hpp" … … 45 46 // has to be included BEFORE PrototypeFactory_impl.hpp! 46 47 #include "RandomNumberEngineFactory.def" 47 #include "CodePatterns/ PrototypeFactory_impl.hpp"48 #include "CodePatterns/ManipulablePrototypeFactory_impl.hpp" 48 49 49 50 RandomNumberEngineFactory::RandomNumberEngineFactory() … … 58 59 59 60 CONSTRUCT_SINGLETON(RandomNumberEngineFactory) 60 CONSTRUCT_ PROTOTYPEFACTORY(RandomNumberEngine)61 CONSTRUCT_MANIPULABLEPROTOTYPEFACTORY(RandomNumberEngine, RandomNumberEngine_Parameters) 61 62 62 63 #include "RandomNumberEngineFactory.undef" -
src/RandomNumbers/RandomNumberEngineFactory.def
r1ee3b8d r0275ad 39 39 #define FactoryNAME RandomNumberEngineFactory 40 40 #define Abstract_Interface_Class RandomNumberEngine 41 #define Abstract_Parameter_Class RandomNumberEngine_Parameters 41 42 #define Abstract_Encapsulation_Class RandomNumberEngine_Encapsulation 42 43 #define type_name_space boost:: -
src/RandomNumbers/RandomNumberEngineFactory.hpp
r1ee3b8d r0275ad 21 21 #include "RandomNumberEngineFactory.undef" 22 22 23 #include "CodePatterns/ PrototypeFactory.hpp"23 #include "CodePatterns/ManipulablePrototypeFactory.hpp" 24 24 25 25 #include <map> 26 26 27 27 class RandomNumberEngine; 28 class RandomNumberEngine_Parameters; 28 29 class RandomNumberEngineFactoryUnitTest; 29 30 class CommandSetRandomNumbersEngineAction; … … 40 41 class RandomNumberEngineFactory : 41 42 public Singleton<RandomNumberEngineFactory>, 42 public PrototypeFactory<RandomNumberEngine>43 public ManipulablePrototypeFactory<RandomNumberEngine,RandomNumberEngine_Parameters> 43 44 { 44 45 friend class Singleton<RandomNumberEngineFactory>; -
src/RandomNumbers/RandomNumberEngineFactory.undef
r1ee3b8d r0275ad 7 7 #undef FactoryNAME 8 8 #undef Abstract_Interface_Class 9 #undef Abstract_Parameter_Class 9 10 #undef Abstract_Encapsulation_Class 10 11 #undef type_name_space -
src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp
r1ee3b8d r0275ad 31 31 #include <boost/random/xor_combine.hpp> 32 32 33 #include "CodePatterns/ Clone.hpp"33 #include "CodePatterns/ManipulableClone.hpp" 34 34 #include "RandomNumberEngine.hpp" 35 35 36 36 class RandomNumberEngineFactory; 37 38 #include "RandomNumberEngine_Parameters.hpp" 37 39 38 40 /** Template class that encapsulates the random number engines from … … 46 48 class RandomNumberEngine_Encapsulation : 47 49 public RandomNumberEngine, 48 public Clone<RandomNumberEngine>50 public ManipulableClone<RandomNumberEngine, RandomNumberEngine_Parameters> 49 51 { 50 52 /** … … 55 57 56 58 public: 59 /** Getter for the whole set of possible parameters. 60 * 61 * @return filled instance of RandomNumberEngine_Parameters 62 */ 63 RandomNumberEngine_Parameters* getParameterSet() const 64 { 65 RandomNumberEngine_Parameters *params = new RandomNumberEngine_Parameters(); 66 params->getParameters(this); 67 return params; 68 } 69 57 70 /** Set the engine's seed. 58 71 * … … 110 123 */ 111 124 RandomNumberEngine* clone() const { 112 RandomNumberEngine* MyClone = NULL; 125 RandomNumberEngine_Parameters *params = getParameterSet(); 126 RandomNumberEngine* MyClone = new RandomNumberEngine_Encapsulation<engine>(*params); 127 //MyClone->seed(getseed()); 128 return MyClone; 129 } 130 131 /** Clones and manipulates the current instance. 132 * 133 * Implementation of ManipulableClone pattern. 134 * 135 * @param _params set of parameters to instantiate manipulated clone with 136 * @return interface reference to cloned&manipulated instance 137 */ 138 ManipulableClone<RandomNumberEngine, RandomNumberEngine_Parameters>* 139 manipulatedclone(const RandomNumberEngine_Parameters &_params) const { 140 RandomNumberEngine_Encapsulation<engine>* MyClone = NULL; 113 141 MyClone = new RandomNumberEngine_Encapsulation<engine>(); 114 MyClone->seed(getseed()); 142 MyClone->value_seed = _params.seed; 143 MyClone->seed(_params.seed); 115 144 return MyClone; 116 145 } … … 125 154 {} 126 155 156 /** Constructor that instantiates a specific random number generator and 157 * distribution. 158 * @param _engine_type instance of the desired engine 159 */ 160 RandomNumberEngine_Encapsulation(const RandomNumberEngine_Parameters &_params) : 161 value_seed(_params.seed) 162 {} 163 127 164 /** Destructor of the class. 128 165 * -
src/RandomNumbers/RandomNumberGeneratorFactory.def
r1ee3b8d r0275ad 27 27 */ 28 28 #define engine_seq \ 29 (minstd_rand0)\ 29 (minstd_rand0) 30 /* 30 31 (minstd_rand)\ 31 32 (rand48)\ … … 36 37 (mt11213b)\ 37 38 (mt19937) 39 */ 38 40 39 41 #define engine_seq_a \ 40 (lagged_fibonacci607)\ 42 (lagged_fibonacci607) 43 /* 41 44 (lagged_fibonacci1279)\ 42 45 (lagged_fibonacci2281)\ … … 55 58 (ranlux64_3_01)\ 56 59 (ranlux64_4_01) 57 60 */ 58 61 #endif /* RANDOMNUMBERGENERATORFACTORY_DEF_ */ -
src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.cpp
r1ee3b8d r0275ad 73 73 rndA_1 = NULL; 74 74 rndA_2 = NULL; 75 rndA_3 = NULL; 75 76 RandomNumberDistributionFactory::getInstance(); 76 77 } … … 81 82 delete rndA_1; 82 83 delete rndA_2; 84 delete rndA_3; 83 85 RandomNumberDistributionFactory::purgeInstance(); 84 86 } … … 103 105 // check one of the distributions in the table 104 106 rndA = RandomNumberDistributionFactory::getInstance(). 105 PrototypeTable[RandomNumberDistributionFactory::uniform_smallint]->clone();107 ManipulablePrototypeTable[RandomNumberDistributionFactory::uniform_smallint]->clone(); 106 108 CPPUNIT_ASSERT_EQUAL( 107 109 std::string(typeid(boost::uniform_smallint<> ).name()), … … 114 116 } 115 117 118 void RandomNumberDistributionFactoryTest::PrototypeManipulationTest() 119 { 120 // make unmodified clone 121 rndA_1 = RandomNumberDistributionFactory::getInstance(). 122 getProduct(RandomNumberDistributionFactory::uniform_smallint); 123 124 // do something with the prototype 125 RandomNumberDistribution_Parameters *params = 126 rndA_1->getParameterSet(); 127 CPPUNIT_ASSERT( 20. != rndA_1->max() ); 128 params->max = 20.; 129 RandomNumberDistributionFactory::getInstance(). 130 manipulatePrototype(RandomNumberDistributionFactory::uniform_smallint, *params); 131 // ... and check max 132 rndA_2 = RandomNumberDistributionFactory::getInstance(). 133 getProduct(RandomNumberDistributionFactory::uniform_smallint); 134 CPPUNIT_ASSERT_EQUAL( 20., rndA_2->max()); 135 CPPUNIT_ASSERT( rndA_1->max() != rndA_2->max()); 136 // ... and check min (remains the same) 137 CPPUNIT_ASSERT( rndA_1->min() == rndA_2->min()); 138 139 // do something with the prototype again 140 params->max = 25.; 141 RandomNumberDistributionFactory::getInstance(). 142 manipulatePrototype(std::string("uniform_smallint"), *params); 143 // ... and check 144 rndA_3 = RandomNumberDistributionFactory::getInstance(). 145 getProduct(RandomNumberDistributionFactory::uniform_smallint); 146 CPPUNIT_ASSERT_EQUAL( 25., rndA_3->max()); 147 CPPUNIT_ASSERT( rndA_1->max() != rndA_3->max()); 148 CPPUNIT_ASSERT( rndA_2->max() != rndA_3->max()); 149 150 delete params; 151 } -
src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.hpp
r1ee3b8d r0275ad 23 23 CPPUNIT_TEST_SUITE( RandomNumberDistributionFactoryTest ); 24 24 CPPUNIT_TEST ( DistributionTest ); 25 CPPUNIT_TEST ( PrototypeManipulationTest ); 25 26 CPPUNIT_TEST_SUITE_END(); 26 27 … … 30 31 31 32 void DistributionTest(); 33 void PrototypeManipulationTest(); 32 34 33 35 private: … … 35 37 RandomNumberDistribution * rndA_1; 36 38 RandomNumberDistribution * rndA_2; 39 RandomNumberDistribution * rndA_3; 37 40 }; 38 41 -
src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.cpp
r1ee3b8d r0275ad 77 77 rndA_1 = NULL; 78 78 rndA_2 = NULL; 79 rndA_3 = NULL; 79 80 RandomNumberEngineFactory::getInstance(); 80 81 } … … 85 86 delete rndA_1; 86 87 delete rndA_2; 88 delete rndA_3; 87 89 RandomNumberEngineFactory::purgeInstance(); 88 90 } … … 107 109 // check one of the engines in the table 108 110 rndA = RandomNumberEngineFactory::getInstance(). 109 PrototypeTable[RandomNumberEngineFactory::minstd_rand0]->clone();111 ManipulablePrototypeTable[RandomNumberEngineFactory::minstd_rand0]->clone(); 110 112 CPPUNIT_ASSERT_EQUAL( 111 113 std::string(typeid(boost::minstd_rand0).name()), … … 117 119 } 118 120 121 void RandomNumberEngineFactoryTest::PrototypeManipulationTest() 122 { 123 // make unmodified clone 124 rndA_1 = RandomNumberEngineFactory::getInstance(). 125 getProduct(RandomNumberEngineFactory::minstd_rand0); 126 127 // obtain manipulator 128 RandomNumberEngine &prototype = RandomNumberEngineFactory::getInstance(). 129 getPrototype(RandomNumberEngineFactory::minstd_rand0); 130 131 // change the prototype directly 132 CPPUNIT_ASSERT ( 0 != prototype.getseed() ); 133 prototype.seed(0); 134 135 // check that prototype has indeed been manipulated 136 rndA_2 = RandomNumberEngineFactory::getInstance(). 137 getProduct(RandomNumberEngineFactory::minstd_rand0); 138 CPPUNIT_ASSERT_EQUAL( (unsigned int)0, rndA_2->getseed() ); 139 CPPUNIT_ASSERT( rndA_2->getseed() != rndA_1->getseed()); 140 141 // manipulate prototype 142 RandomNumberEngine_Parameters *params = rndA_1->getParameterSet(); 143 CPPUNIT_ASSERT ( rndA_1->getseed() != (unsigned int)3 ); 144 params->seed = 3; 145 RandomNumberEngineFactory::getInstance(). 146 manipulatePrototype(RandomNumberEngineFactory::minstd_rand0, *params); 147 148 // 149 rndA_3 = RandomNumberEngineFactory::getInstance(). 150 getProduct(RandomNumberEngineFactory::minstd_rand0); 151 CPPUNIT_ASSERT_EQUAL( (unsigned int)3, rndA_3->getseed() ); 152 CPPUNIT_ASSERT( rndA_3->getseed() != rndA_1->getseed()); 153 154 delete params; 155 } 156 -
src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.hpp
r1ee3b8d r0275ad 23 23 CPPUNIT_TEST_SUITE( RandomNumberEngineFactoryTest ); 24 24 CPPUNIT_TEST ( EngineTest ); 25 CPPUNIT_TEST ( PrototypeManipulationTest ); 25 26 CPPUNIT_TEST_SUITE_END(); 26 27 … … 30 31 31 32 void EngineTest(); 33 void PrototypeManipulationTest(); 32 34 33 35 private: … … 35 37 RandomNumberEngine *rndA_1; 36 38 RandomNumberEngine *rndA_2; 39 RandomNumberEngine *rndA_3; 37 40 }; 38 41
Note:
See TracChangeset
for help on using the changeset viewer.