base
NamedVector.hpp
Go to the documentation of this file.
1 #ifndef BASE_NAMED_VECTOR_HPP
2 #define BASE_NAMED_VECTOR_HPP
3 
4 #include <stdexcept>
5 #include <vector>
6 #include <algorithm>
7 #include <string>
8 
9 namespace base
10 {
11  template <class T>
12  struct NamedVector
13  {
17  struct InvalidName : public std::runtime_error
18  {
19  std::string name;
20  InvalidName(std::string const& name)
21  : std::runtime_error("trying to access element " + name +
22  ", but there is no element with that name on this structure")
23  , name(name) {}
24 
25  ~InvalidName() throw() {}
26  };
27 
31  std::vector<std::string> names;
32 
34  std::vector<T> elements;
35 
37  bool hasNames() const
38  {
39  return !names.empty() && !names[0].empty();
40  }
41 
43  const T& getElementByName(std::string name) const
44  {
45  return elements.at( mapNameToIndex( name ) );
46  }
47 
49  const T& operator[](std::string name) const
50  {
51  return elements.at( mapNameToIndex( name ) );
52  }
53 
55  T& operator[](std::string name)
56  {
57  return elements.at( mapNameToIndex( name ) );
58  }
59 
61  const T& operator[]( size_t index ) const
62  {
63  return elements.at( index );
64  }
65 
67  T& operator[]( size_t index )
68  {
69  return elements.at( index );
70  }
71 
74  void resize(size_t size)
75  {
76  elements.resize(size);
77  names.resize(size);
78  }
79 
82  size_t size() const
83  {
84  return elements.size();
85  }
86 
89  bool empty() const
90  {
91  return elements.empty();
92  }
93 
96  void clear()
97  {
98  elements.clear();
99  names.clear();
100  }
101 
106  size_t mapNameToIndex(std::string const& name) const
107  {
108  std::vector<std::string>::const_iterator it = find(names.begin(), names.end(), name);
109  if (it == names.end())
110  throw InvalidName(name);
111  return it - names.begin();
112  }
113  };
114 }
115 
116 #endif
117 
size_t size() const
Definition: NamedVector.hpp:82
Definition: NamedVector.hpp:12
std::vector< T > elements
Definition: NamedVector.hpp:34
~InvalidName()
Definition: NamedVector.hpp:25
void clear()
Definition: NamedVector.hpp:96
std::string name
Definition: NamedVector.hpp:19
bool hasNames() const
Definition: NamedVector.hpp:37
const T & operator[](size_t index) const
Definition: NamedVector.hpp:61
T & operator[](size_t index)
Definition: NamedVector.hpp:67
void resize(size_t size)
Definition: NamedVector.hpp:74
size_t mapNameToIndex(std::string const &name) const
Definition: NamedVector.hpp:106
Definition: LinearAngular6DCommand.hpp:8
Definition: NamedVector.hpp:17
const T & operator[](std::string name) const
Definition: NamedVector.hpp:49
const T & getElementByName(std::string name) const
Definition: NamedVector.hpp:43
T & operator[](std::string name)
Definition: NamedVector.hpp:55
InvalidName(std::string const &name)
Definition: NamedVector.hpp:20
std::vector< std::string > names
Definition: NamedVector.hpp:31
bool empty() const
Definition: NamedVector.hpp:89