source: src/Parameters/Value.hpp

Candidate_v1.6.1
Last change on this file was 2eded3e, checked in by Frederik Heber <frederik.heber@…>, 8 years ago

Added specific Value and Parameter implemenations for Vector.

  • for the CommandLineParser the values are get parsed immediately (prior to executing any Action). Hence, names of geometry objects that first need to be created by an action cannot yet be present in the registry and thus the Action will fail.
  • we need to postpone the replacement of the geometry name by its stored vector components until the Parameter<>::get() call. This is possible as the value is validated only on get(), not on set(), i.e. giving illegal values is ok, only the Action will fail.
  • therefore, we override the specialize the template Value for Vector to allow storing of a string instead of a Vector and to allow putting the actual parsing of the string in front.
  • the Parameter overriding becomes necessary in order to override clone() and copy cstor(), there using string setters.
  • ContinuousValueTest now needs lib..Parameters, lib..Geometry.
  • static functions parseAsVector and setFromVector for convenience, e.g. QtUI needs to convert from string and to Vector.
  • TESTS: Marked dryrun store-session again as XFAIL, removed XFAIL from load- session python.
  • Property mode set to 100644
File size: 3.5 KB
Line 
1/*
2 * Value.hpp
3 *
4 * Created on: Apr 13, 2012
5 * Author: ankele
6 */
7
8#ifndef VALUE_HPP_
9#define VALUE_HPP_
10
11
12// include config.h
13#ifdef HAVE_CONFIG_H
14#include <config.h>
15#endif
16
17#include <string>
18#include <vector>
19
20#include "ValueAsString.hpp"
21#include "ValueInterface.hpp"
22#include "Validators/Validator.hpp"
23
24#include "StreamOperators.hpp"
25
26#include "CodePatterns/Range.hpp"
27#include "CodePatterns/toString.hpp"
28
29class ValueTest;
30template <class T>
31class Parameter;
32class ParameterException;
33class ParameterValidatorException;
34class ParameterValueException;
35
36/** Converter for a string to a std::vector of any class
37 * We use default conversion via stringstream as suggested by [Stroustrup].
38 * \param _&_object reference to object to convert.
39 * \return converted \a _object of templated type
40 */
41template <class T>
42struct ConvertTo< std::vector<T> > {
43 std::vector<T> operator()(const std::string &_object) {
44 std::vector<T> returnobjects;
45 if (!_object.empty()) {
46 std::stringstream s;
47 T object;
48 s << _object;
49 while (s.good()) {
50 s >> object;
51 returnobjects.push_back(object);
52 }
53 }
54 return returnobjects;
55 }
56};
57
58/** This class represents a general value.
59 *
60 */
61template <class T>
62class Value :
63 public ValueAsString,
64 public ValueInterface<T>
65{
66 //!> unit test needs to have access to internal values
67 friend class ValueTest;
68 friend class ContinuousValueTest;
69// friend class Parameter<T>;
70public:
71 Value();
72 Value(const Validator<T> &_validator);
73 Value(const std::vector<T> &_ValidValues);
74 Value(const range<T> &_ValidRange);
75 virtual ~Value();
76
77 // functions for ValueInterface
78 bool isValid(const T &_value) const throw(ParameterValidatorException);
79 const T & getUnvalidated() const throw(ParameterValueException);
80 const T & get() const throw(ParameterValueException);
81 void set(const T & _value) throw(ParameterException);
82 bool isSet() const;
83
84 // string functions for ValueInterface
85 bool isValidAsString(const std::string &_value) const throw(ParameterValidatorException);
86 const std::string getAsString() const throw(ParameterValueException);
87 const std::string getAsStringUnvalidated() const throw(ParameterValueException);
88 void setAsString(const std::string &_value) throw(ParameterException);
89
90 // comfortable setter
91 Value<T> &operator=(const T &_value)
92 { set(_value); return *this; }
93
94 // comparator
95 bool operator==(const Value<T> &_instance) const throw(ParameterValidatorException);
96 bool operator!=(const Value<T> &_instance) const throw(ParameterValidatorException)
97 { return !((*this)==(_instance)); }
98
99 const Validator<T> & getValidator() const;
100 Validator<T> & getValidator();
101
102 // comfortable validator functions
103 const range<T> & getValidRange() const throw(ParameterValidatorException);
104 void setValidRange(const range<T> &_range) throw(ParameterValueException);
105 void appendValidValue(const T &_value) throw(ParameterValidatorException);
106 const std::vector<T> &getValidValues() const throw(ParameterValidatorException);
107
108private:
109 //!> Internal converter from string to internal type
110 static ConvertTo<T> Converter;
111
112 //!> whether a value has been set or not
113 bool ValueSet;
114 //!> contained value
115 T value;
116
117 //!> the validator
118 Validator<T> *validator;
119};
120
121#include "Specifics/Value_atom.hpp"
122#include "Specifics/Value_element.hpp"
123#include "Specifics/Value_elements.hpp"
124#include "Specifics/Value_molecule.hpp"
125#include "Specifics/Value_string.hpp"
126#include "Specifics/Value_vector.hpp"
127
128#include "Value_impl.hpp"
129
130#endif /* VALUE_HPP_ */
Note: See TracBrowser for help on using the repository browser.