Gaudi::Parsers::PropertyValue Class Referencefinal

#include <src/JobOptionsSvc/PropertyValue.h>

Collaboration diagram for Gaudi::Parsers::PropertyValue:

Public Types

typedef boost::variant< std::string, std::vector< std::string >, std::map< std::string, std::string > > Value
 
typedef std::vector< std::stringVectorOfStrings
 
typedef std::map< std::string, std::stringMapOfStrings
 

Public Member Functions

 PropertyValue (Value value, bool is_reference=false)
 
 PropertyValue (Value value, const Position &position, bool is_reference=false)
 
const Positionposition () const
 
std::stringString ()
 
const std::stringString () const
 
VectorOfStringsVector ()
 
const VectorOfStringsVector () const
 
MapOfStringsMap ()
 
const MapOfStringsMap () const
 
std::string ToString () const
 
bool HasPosition () const
 
bool IsSimple () const
 
bool IsVector () const
 
bool IsMap () const
 
bool IsReference () const
 
PropertyValueoperator+= (const PropertyValue &right)
 
const PropertyValue operator+ (const PropertyValue &right)
 
PropertyValueoperator-= (const PropertyValue &right)
 
const PropertyValue operator- (const PropertyValue &right)
 

Private Attributes

Value value_
 
Position position_
 
bool is_reference_
 

Detailed Description

Definition at line 19 of file PropertyValue.h.

Member Typedef Documentation

typedef std::map<std::string, std::string> Gaudi::Parsers::PropertyValue::MapOfStrings

Definition at line 25 of file PropertyValue.h.

typedef boost::variant<std::string, std::vector<std::string>, std::map<std::string, std::string> > Gaudi::Parsers::PropertyValue::Value

Definition at line 23 of file PropertyValue.h.

typedef std::vector<std::string> Gaudi::Parsers::PropertyValue::VectorOfStrings

Definition at line 24 of file PropertyValue.h.

Constructor & Destructor Documentation

Gaudi::Parsers::PropertyValue::PropertyValue ( Value  value,
bool  is_reference = false 
)
inlineexplicit

Definition at line 28 of file PropertyValue.h.

29  : value_(std::move(value)), is_reference_(is_reference) {}
T move(T...args)
Gaudi::Parsers::PropertyValue::PropertyValue ( Value  value,
const Position position,
bool  is_reference = false 
)
inline

Definition at line 30 of file PropertyValue.h.

31  : value_(std::move(value)), position_(position),
32  is_reference_(is_reference) {}
const Position & position() const
Definition: PropertyValue.h:34
T move(T...args)

Member Function Documentation

bool Gaudi::Parsers::PropertyValue::HasPosition ( ) const
inline

Definition at line 47 of file PropertyValue.h.

47 {return position_.Exists();}
bool Exists() const
Definition: Position.h:22
bool Gaudi::Parsers::PropertyValue::IsMap ( ) const

Definition at line 23 of file PropertyValue.cpp.

23  {
24  return boost::get<std::map<std::string, std::string> >(&value_) != NULL;
25 }
bool Gaudi::Parsers::PropertyValue::IsReference ( ) const
inline

Definition at line 51 of file PropertyValue.h.

bool Gaudi::Parsers::PropertyValue::IsSimple ( ) const

Definition at line 15 of file PropertyValue.cpp.

15  {
16  return boost::get<std::string>(&value_) != NULL;
17 }
bool Gaudi::Parsers::PropertyValue::IsVector ( ) const

Definition at line 19 of file PropertyValue.cpp.

19  {
20  return boost::get<std::vector<std::string> >(&value_) != NULL;
21 }
MapOfStrings& Gaudi::Parsers::PropertyValue::Map ( )
inline

Definition at line 43 of file PropertyValue.h.

43 { return boost::get<MapOfStrings>(value_);}
const MapOfStrings& Gaudi::Parsers::PropertyValue::Map ( ) const
inline

Definition at line 44 of file PropertyValue.h.

44 { return boost::get<MapOfStrings>(value_);}
const gp::PropertyValue Gaudi::Parsers::PropertyValue::operator+ ( const PropertyValue right)

Definition at line 65 of file PropertyValue.cpp.

65  {
66  return PropertyValue(*this) += right;
67 
68 }
PropertyValue(Value value, bool is_reference=false)
Definition: PropertyValue.h:28
T right(T...args)
gp::PropertyValue & Gaudi::Parsers::PropertyValue::operator+= ( const PropertyValue right)

Definition at line 28 of file PropertyValue.cpp.

28  {
29 
30  if (IsSimple() || IsReference()) {
32  }
33 
34  if (IsVector()) {
35  if (right.IsSimple()) {
36  boost::get<VectorOfStrings>(value_).push_back(
37  boost::get<std::string>(right.value_));
38  return *this;
39  }
40  if (right.IsVector()){
41  VectorOfStrings& vec = boost::get<VectorOfStrings>(value_);
42  for (const auto& item : boost::get<VectorOfStrings>(right.value_)) {
43  vec.push_back(item);
44  }
45  return *this;
46  }
48  }
49 
50  if (IsMap()) {
51  if (!right.IsMap()) {
53  }
54  MapOfStrings& map = boost::get<MapOfStrings>(value_);
55  const MapOfStrings& rmap = boost::get<MapOfStrings>(right.value_);
56  for (const auto& item : rmap) {
57  map.insert(item);
58  }
59  return *this;
60  }
61  return *this;
62 }
std::vector< std::string > VectorOfStrings
Definition: PropertyValue.h:24
std::map< std::string, std::string > MapOfStrings
Definition: PropertyValue.h:25
T right(T...args)
void push_back(Container &c, const Value &v, std::true_type)
T push_back(T...args)
struct GAUDI_API map
Parametrisation class for map-like implementation.
static PropertyValueException WrongRValue()
Definition: PropertyValue.h:76
T insert(T...args)
static PropertyValueException WrongLValue()
Definition: PropertyValue.h:72
const gp::PropertyValue Gaudi::Parsers::PropertyValue::operator- ( const PropertyValue right)

Definition at line 113 of file PropertyValue.cpp.

113  {
114  return PropertyValue(*this) -= right;
115 }
PropertyValue(Value value, bool is_reference=false)
Definition: PropertyValue.h:28
T right(T...args)
gp::PropertyValue & Gaudi::Parsers::PropertyValue::operator-= ( const PropertyValue right)

Definition at line 71 of file PropertyValue.cpp.

71  {
72  if (IsSimple() || IsReference()) {
74  }
75 
76  if (IsVector()) {
77  VectorOfStrings& vec = Vector();
78  if (right.IsSimple()) {
79  vec.erase(std::find(vec.begin(), vec.end(), right.String()));
80  return *this;
81  }
82 
83  if (right.IsVector()) {
84  const VectorOfStrings& rvec = right.Vector();
85  for (const auto& item : rvec) {
86  vec.erase(std::find(vec.begin(), vec.end(), item));
87  }
88  return *this;
89  }
91  }
92 
93  if (IsMap()) {
94  MapOfStrings& map = Map();
95  if (right.IsSimple()) {
96  map.erase(right.String());
97  return *this;
98  }
99 
100  if (right.IsVector()) {
101  const VectorOfStrings& rvec = right.Vector();
102  for (const auto& item : rvec) {
103  map.erase(item);
104  }
105  return *this;
106  }
108  }
110 }
std::vector< std::string > VectorOfStrings
Definition: PropertyValue.h:24
std::map< std::string, std::string > MapOfStrings
Definition: PropertyValue.h:25
T right(T...args)
struct GAUDI_API map
Parametrisation class for map-like implementation.
static PropertyValueException WrongRValue()
Definition: PropertyValue.h:76
VectorOfStrings & Vector()
Definition: PropertyValue.h:39
T find(T...args)
static PropertyValueException WrongLValue()
Definition: PropertyValue.h:72
const Position& Gaudi::Parsers::PropertyValue::position ( ) const
inline

Definition at line 34 of file PropertyValue.h.

34 { return position_;}
std::string& Gaudi::Parsers::PropertyValue::String ( )
inline

Definition at line 36 of file PropertyValue.h.

36 { return boost::get<std::string>(value_);}
const std::string& Gaudi::Parsers::PropertyValue::String ( ) const
inline

Definition at line 37 of file PropertyValue.h.

37 { return boost::get<std::string>(value_);}
std::string Gaudi::Parsers::PropertyValue::ToString ( ) const

Definition at line 117 of file PropertyValue.cpp.

117  {
118  if (IsReference()) {
120  value = boost::get<std::vector<std::string> >(&value_);
121  assert(value != NULL);
122  if (value->at(0) != "") {
123  return "@"+value->at(0)+"."+value->at(1);
124  } else {
125  return "@"+value->at(0);
126  }
127  }
128  if (const std::string* value = boost::get<std::string>(&value_)) {
129  return *value;
130  } else if (const std::vector<std::string>*
132  std::string result = "[";
133  std::string delim = "";
134  for (const auto& in : *value) {
135  result += delim + in;
136  delim = ", ";
137  }
138  return result+"]";
139  } else if (const std::map<std::string, std::string>*
141  std::string result = "{";
142  std::string delim = "";
143  for (const auto& in : *value) {
144  result += delim + in.first + ":" + in.second;
145  delim = ", ";
146  }
147  return result+"}";
148  }
149  assert(false);
150  // @todo Check the validity of this logic
151  return std::string(); // avoid compilation warning
152 }
STL class.
T at(T...args)
VectorOfStrings& Gaudi::Parsers::PropertyValue::Vector ( )
inline

Definition at line 39 of file PropertyValue.h.

39 { return boost::get<VectorOfStrings>(value_);}
const VectorOfStrings& Gaudi::Parsers::PropertyValue::Vector ( ) const
inline

Definition at line 40 of file PropertyValue.h.

40  {
41  return boost::get<VectorOfStrings>(value_);}

Member Data Documentation

bool Gaudi::Parsers::PropertyValue::is_reference_
private

Definition at line 64 of file PropertyValue.h.

Position Gaudi::Parsers::PropertyValue::position_
private

Definition at line 63 of file PropertyValue.h.

Value Gaudi::Parsers::PropertyValue::value_
private

Definition at line 62 of file PropertyValue.h.


The documentation for this class was generated from the following files: