PhoenixMock  1.8.7
Tools to split/merge/print mock used in Phoenix
OptionValue_impl.h
Go to the documentation of this file.
1 /***************************************
2  Auteur : Pierre Aubert
3  Mail : pierre.aubert@lapp.in2p3.fr
4  Licence : CeCILL-C
5 ****************************************/
6 
7 #ifndef __POPTIONVALUE_IMPL_H__
8 #define __POPTIONVALUE_IMPL_H__
9 
10 #include <stdexcept>
11 #include "OptionValue.h"
12 
14 
16 template<typename T>
17 void OptionValue::setDefaultValue(const T & value){
18  std::string valueBinStr(convertToString(value));
19  VecValue vecValue;
20  vecValue.push_back(valueBinStr);
21  p_vecDefaultValue = vecValue;
22 }
23 
25 
27 template<typename T>
28 void OptionValue::setDefaultValue(const std::vector<T> & value){
29  p_vecDefaultValue = value;
30 }
31 
33 
35 template<typename T>
36 void OptionValue::setDefaultValue(const std::list<T> & value){
37  VecValue vecValue;
38  for(typename std::list<T>::const_iterator it(value.begin()); it != value.end(); ++it){
39  vecValue.push_back(convertToString(*it));
40  }
41  p_vecDefaultValue = vecValue;
42 }
43 
45 
48 template<typename T>
49 void OptionValue::getValue(T & value, bool isParsed) const{
50  checkTypeFromTemplate<T>();
51  if(isParsed){
52  if(p_vecValue.size() > 1lu){
53  std::runtime_error("OptionValue::getValue : several value but only one value in parameter");
54  }
55  value = stringToValue<T>(p_vecValue.front());
56  }else{
57  if(p_vecDefaultValue.size() == 1lu){
58  value = stringToValue<T>(p_vecDefaultValue.front());
59  }else{
60  std::runtime_error("OptionValue::getValue : several value but only one value in parameter");
61  }
62  }
63 }
64 
66 
69 template<typename T>
70 void OptionValue::getValue(std::vector<T> & vecValue, bool isParsed) const{
71  checkTypeFromTemplate<T>();
72  if(isParsed){
73  for(VecValue::const_iterator it(p_vecValue.begin()); it != p_vecValue.end(); ++it){
74  vecValue.push_back(stringToValue<T>(*it));
75  }
76  }else{
77  for(VecValue::const_iterator it(p_vecDefaultValue.begin()); it != p_vecDefaultValue.end(); ++it){
78  vecValue.push_back(stringToValue<T>(*it));
79  }
80  }
81 }
82 
84 
87 template<typename T>
88 void OptionValue::getValue(std::list<T> & vecValue, bool isParsed) const{
89  checkTypeFromTemplate<T>();
90  if(isParsed){
91  for(VecValue::const_iterator it(p_vecValue.begin()); it != p_vecValue.end(); ++it){
92  vecValue.push_back(stringToValue<T>(*it));
93  }
94  }else{
95  for(VecValue::const_iterator it(p_vecDefaultValue.begin()); it != p_vecDefaultValue.end(); ++it){
96  vecValue.push_back(stringToValue<T>(*it));
97  }
98  }
99 }
100 
102 
104 template<typename T>
106  OptionType::OptionType optionTypeFromDefault = getOptionTypeFromType<T>();
107  if(!isOptionTypeCompatible(p_type, optionTypeFromDefault)){
108  std::stringstream strError;
109  strError << "OptionValue::checkTypeFromTemplate : Incompatible types from parameters (" << convertOptionTypeToString(p_type) << ") ad for default type ("<<convertOptionTypeToString(optionTypeFromDefault)<<")";
110  throw std::runtime_error(strError.str());
111  }
112 }
113 
114 #endif
115 
116 
convertToString
std::string convertToString(const T &val)
Convert a type into a string.
Definition: convertToString_impl.h:17
convertOptionTypeToString
std::string convertOptionTypeToString(OptionType::OptionType type)
Convert the OptionType into string.
Definition: OptionType.cpp:69
OptionValue.h
OptionValue::p_type
OptionType::OptionType p_type
Type of the OptionValue.
Definition: OptionValue.h:77
OptionValue::checkTypeFromTemplate
void checkTypeFromTemplate() const
Check the type from the template.
Definition: OptionValue_impl.h:105
OptionValue::setDefaultValue
void setDefaultValue(const T &value)
Set the value in the OptionValue.
Definition: OptionValue_impl.h:17
OptionValue::p_vecDefaultValue
VecValue p_vecDefaultValue
Default value of the OptionValue.
Definition: OptionValue.h:81
isOptionTypeCompatible
bool isOptionTypeCompatible(OptionType::OptionType typeFromParam, OptionType::OptionType typeFromType)
Say if two types are compatible.
Definition: OptionType.cpp:54
OptionType::OptionType
OptionType
Definition: OptionType.h:19
OptionValue::getValue
const VecValue & getValue() const
Get the vector of values.
Definition: OptionValue.cpp:131
OptionValue::p_vecValue
VecValue p_vecValue
Vector of the values of the OptionValue.
Definition: OptionValue.h:79
VecValue
std::vector< std::string > VecValue
Vector of values.
Definition: OptionValue.h:17