source: src/Parameters/ContinuousValue_impl.hpp@ 3c5ef5

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
Last change on this file since 3c5ef5 was 3c5ef5, checked in by Michael Ankele <ankele@…>, 13 years ago

DiscreteValueTest uses new Value class

  • Property mode set to 100644
File size: 5.7 KB
Line 
1/*
2 * ContinuousValue_impl.hpp
3 *
4 * Created on: Sep 29, 2011
5 * Author: heber
6 */
7
8#ifndef CONTINUOUSVALUE_IMPL_HPP_
9#define CONTINUOUSVALUE_IMPL_HPP_
10
11// include config.h
12#ifdef HAVE_CONFIG_H
13#include <config.h>
14#endif
15
16#include <string>
17
18#include <boost/any.hpp>
19
20#include "CodePatterns/Assert.hpp"
21#include "CodePatterns/Log.hpp"
22#include "CodePatterns/Range.hpp"
23
24#include "ContinuousValue.hpp"
25
26/** Constructor of class DiscreteValue.
27 */
28template <class T>
29ContinuousValue<T>::ContinuousValue() :
30 ValueSet(false),
31 ValidRangeSet(range<bool>(false, false))
32{}
33
34/** Constructor of class DiscreteValue with set of valid values.
35 *
36 * @param _ValidValues vector with all valid values
37 */
38template <class T>
39ContinuousValue<T>::ContinuousValue(const range<T> &_ValidRange) :
40 ValueSet(false),
41 ValidRangeSet(range<bool>(true, true)),
42 ValidRange(_ValidRange)
43{
44// LOG(0, "STATUS: Valid range is now " << ValidRange << ".");
45}
46
47/** Destructor of class DiscreteValue.
48 */
49template <class T>
50ContinuousValue<T>::~ContinuousValue()
51{}
52
53/** Checks whether \a _value is a valid value.
54 * \param _value value to check for validity.
55 * \return true - \a _value is valid, false - is not
56 */
57template <class T>
58bool ContinuousValue<T>::isValid(const T & _value) const
59{
60 bool isBefore = true;
61 bool isBeyond = true;
62 // check left boundary
63 isBefore = !((!ValidRangeSet.first) || (!ValidRange.isBefore(_value)));
64// if (isBefore)
65// LOG(0, "INFO: " << _value << " is before " << ValidRange.first << ".");
66 // check right boundary
67 isBeyond = !((!ValidRangeSet.last) || (!ValidRange.isBeyond(_value)) || (_value == ValidRange.last));
68// if (isBeyond)
69// LOG(0, "INFO: " << _value << " is beyond " << ValidRange.last << ".");
70 return (!isBefore) && (!isBeyond);
71}
72
73/** Compares this continuous value against another \a _instance.
74 *
75 * @param _instance other value to compare to
76 * @return true - if value and valid ranges are the same, false - else
77 */
78template <class T>
79bool ContinuousValue<T>::operator==(const ContinuousValue<T> &_instance) const
80{
81 bool status = true;
82 status = status && (ValidRange == _instance.ValidRange);
83 status = status && (ValueSet == _instance.ValueSet);
84 if (ValueSet && _instance.ValueSet)
85 status = status && (value == _instance.value);
86 return status;
87}
88
89/** Getter of value, returning string.
90 *
91 * @return string value
92 */
93template <class T>
94const T & ContinuousValue<T>::get() const
95{
96 ASSERT(ValueSet,
97 "ContinuousValue<T>::get() - requesting unset value.");
98 return value;
99}
100
101/** Setter of value for string
102 *
103 * @param _value string containing new value
104 */
105template <class T>
106void ContinuousValue<T>::set(const T & _value)
107{
108 ASSERT(isValid(_value),
109 "ContinuousValue<T>::setValue() - trying to set invalid value "+toString(_value)+".");
110 if (!ValueSet)
111 ValueSet = true;
112 value = _value;
113// LOG(0, "STATUS: Value is now set to " << value << ".");
114}
115
116/** Setter for the valid range.
117 *
118 * If value is invalid in new range, we throw AssertFailure and set ValueSet to false.
119 *
120 * @param _range range (pair of values)
121 */
122template <class T>
123void ContinuousValue<T>::setValidRange(const range<T> &_range)
124{
125
126 ValidRangeSet = range<bool>(true, true);
127 ValidRange = _range;
128 if (ValueSet) {
129 //std::cout << "Checking whether " << value << " is in range " << ValidRange << "." << std::endl;
130 if (!((ValidRange.isInRange(value)) || (value == ValidRange.last))) {
131 //std::cout << "ValueSet to false." << std::endl;
132 ValueSet = false;
133 // have full check again in assert such that it appears in output, too
134 ASSERT(ValidRange.isInRange(value) || (value == ValidRange.last),
135 "ContinuousValue<T>::setValidRange() - new range "
136 +toString(_range)+" invalidates current value "+toString(value)+".");
137 }
138 }
139// LOG(0, "STATUS: Valid range is now " << ValidRange << ".");
140}
141
142/** Getter for the valid range.
143 *
144 * @return _range range (pair of values)
145 */
146template <class T>
147const range<T> & ContinuousValue<T>::getValidRange() const
148{
149 ASSERT(ValidRangeSet.first && ValidRangeSet.last,
150 "ContinuousValue<T>::getValidRange() called though no valid range set so far.");
151 return ValidRange;
152}
153
154/** Checks whether \a _value is a valid value.
155 * \param _value value to check for validity.
156 * \return true - \a _value is valid, false - is not
157 */
158template <class T>
159bool ContinuousValue<T>::isValidAsString(const std::string _value) const
160{
161 /*bool isBefore = true;
162 bool isBeyond = true;
163 // check left boundary
164 isBefore = !((!ValidRangeSet.first) || (!ValidRange.isBefore(_value)));
165// if (isBefore)
166// LOG(0, "INFO: " << _value << " is before " << ValidRange.first << ".");
167 // check right boundary
168 isBeyond = !((!ValidRangeSet.last) || (!ValidRange.isBeyond(_value)) || (_value == ValidRange.last));
169// if (isBeyond)
170// LOG(0, "INFO: " << _value << " is beyond " << ValidRange.last << ".");
171 return (!isBefore) && (!isBeyond);*/
172 return true;
173}
174
175
176/** Sets the value.
177 *
178 * We check for its validity, otherwise we throw an Assert::AssertionFailure.
179 *
180 * @param _value const reference of value to set
181 */
182template <class T>
183void ContinuousValue<T>::setAsString(const std::string _value)
184{
185 /*ASSERT(isValidAsString(_value),
186 "ContinuousValue<T>::setValue() - trying to set invalid value "+toString(_value)+".");
187 if (!ValueSet)
188 ValueSet = true;
189 value = _value;*/
190}
191
192/** Getter for the set value.
193 *
194 * We check whether it has been set, otherwise we throw an Assert::AssertionFailure.
195 *
196 * @return set value
197 */
198template <class T>
199const std::string ContinuousValue<T>::getAsString() const
200{
201 ASSERT(ValueSet,
202 "ContinuousValue<T>::get() - value has never been set.");
203 return toString(value);
204}
205
206#endif /* CONTINUOUSVALUE_IMPL_HPP_ */
Note: See TracBrowser for help on using the repository browser.