MemoryID.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <functional> // for std::hash
4 #include <string>
5 #include <vector>
6 
7 #include "Time.h"
8 
9 
10 namespace armarx::armem
11 {
12 
48  class MemoryID
49  {
50  public:
51 
52  std::string memoryName = "";
53  std::string coreSegmentName = "";
54  std::string providerSegmentName = "";
55  std::string entityName = "";
57  int instanceIndex = -1;
58 
59 
60  public:
61 
63  MemoryID();
65  explicit MemoryID(const std::string& string);
66 
67  MemoryID(const std::string& memoryName,
68  const std::string& coreSegmentName,
69  const std::string& providerSegmentName = "",
70  const std::string& entityName = "",
72  int instanceIndex = -1);
73 
74 
94  bool isWellDefined() const;
95 
96 
97  // Checks whether a specific level is specified.
98 
99  bool hasMemoryName() const
100  {
101  return not memoryName.empty();
102  }
103  bool hasCoreSegmentName() const
104  {
105  return not coreSegmentName.empty();
106  }
108  {
109  return not providerSegmentName.empty();
110  }
111  bool hasEntityName() const
112  {
113  return not entityName.empty();
114  }
115  bool hasTimestamp() const
116  {
117  return timestamp.isValid();
118  }
120  {
122  }
123  bool hasInstanceIndex() const
124  {
125  return instanceIndex >= 0;
126  }
128  {
129  instanceIndex = -1;
130  }
131 
132 
133  // Slice getters: Get upper part of the ID.
134 
135  MemoryID getMemoryID() const;
136  MemoryID getCoreSegmentID() const;
138  MemoryID getEntityID() const;
141 
142  // Slice getter: remove the last set name
143  MemoryID removeLeafItem() const;
144 
145 
146  // Slice setters: Set part of the ID.
147 
148  void setMemoryID(const MemoryID& id);
149  void setCoreSegmentID(const MemoryID& id);
150  void setProviderSegmentID(const MemoryID& id);
151  void setEntityID(const MemoryID& id);
152  void setEntitySnapshotID(const MemoryID& id);
153  void setEntityInstanceID(const MemoryID& id);
154 
155  // Return a modified copy.
156 
157  MemoryID withMemoryName(const std::string& name) const;
158  MemoryID withCoreSegmentName(const std::string& name) const;
159  MemoryID withProviderSegmentName(const std::string& name) const;
160  MemoryID withEntityName(const std::string& name) const;
161  MemoryID withTimestamp(Time time) const;
162  MemoryID withInstanceIndex(int index) const;
163 
164 
165  // String conversion
166 
178  std::string str(bool escapeDelimiters = true) const;
179 
181  std::string timestampStr() const;
183  std::string instanceIndexStr() const;
184 
186  static MemoryID fromString(const std::string& string);
188  static Time timestampFromStr(const std::string& timestamp);
190  static int instanceIndexFromStr(const std::string& index);
191 
192 
194  std::vector<std::string> getAllItems(bool escapeDelimiters = false) const;
196  std::vector<std::string> getItems(bool escapeDelimiters = false) const;
197 
198 
199  // Other utility.
200 
202  bool hasGap() const;
204  std::string getLeafItem() const;
205 
206 
207  // Operators
208 
209  bool operator ==(const MemoryID& other) const;
210  inline bool operator !=(const MemoryID& other) const
211  {
212  return not (*this == other);
213  }
214 
215  bool operator< (const MemoryID& rhs) const;
216  inline bool operator> (const MemoryID& rhs) const
217  {
218  return rhs < (*this);
219  }
220  inline bool operator<=(const MemoryID& rhs) const
221  {
222  return not operator> (rhs);
223  }
224  inline bool operator>=(const MemoryID& rhs) const
225  {
226  return not operator< (rhs);
227  }
228 
229  friend std::ostream& operator<<(std::ostream& os, const MemoryID id);
230 
231 
232  private:
233 
234  static long long parseInteger(const std::string& string, const std::string& semanticName);
235  static std::string escapeDelimiter(const std::string& name);
236  static std::string escape(const std::string& name, bool escapeDelimiters);
237 
238  static const std::string delimiter;
239 
240 
241  // Do not allow specifying the delimiter from outside.
242  std::string str(const std::string& delimiter, bool escapeDelimiter) const;
243 
244  };
245 
246 
267  bool contains(const MemoryID& general, const MemoryID& specific);
268 
269 } // namespace armarx::armem
270 
271 
272 namespace std
273 {
274 
275  template <>
276  struct hash<armarx::armem::MemoryID>
277  {
278  std::size_t operator()(const armarx::armem::MemoryID& id) const
279  {
280  const std::string sid = id.str();
281  return std::hash<string>()(sid);
282  }
283  };
284 
285 }
286 
armarx::armem::MemoryID::isWellDefined
bool isWellDefined() const
Indicate whether this ID is well-defined.
Definition: MemoryID.cpp:147
armarx::armem::MemoryID::timestamp
Time timestamp
Definition: MemoryID.h:56
armarx::armem::MemoryID::setCoreSegmentID
void setCoreSegmentID(const MemoryID &id)
Definition: MemoryID.cpp:279
armarx::armem::MemoryID::getEntityInstanceID
MemoryID getEntityInstanceID() const
Definition: MemoryID.cpp:242
armarx::core::time::DateTime::isValid
bool isValid() const
Definition: DateTime.cpp:135
armarx::armem::MemoryID::timestampFromStr
static Time timestampFromStr(const std::string &timestamp)
Reconstruct a timestamp from a string as returned by timestampStr().
Definition: MemoryID.cpp:362
armarx::armem::MemoryID::operator>
bool operator>(const MemoryID &rhs) const
Definition: MemoryID.h:216
armarx::armem::MemoryID::operator<=
bool operator<=(const MemoryID &rhs) const
Definition: MemoryID.h:220
armarx::armem::MemoryID::providerSegmentName
std::string providerSegmentName
Definition: MemoryID.h:54
armarx::armem::MemoryID::removeLeafItem
MemoryID removeLeafItem() const
Definition: MemoryID.cpp:249
armarx::armem::MemoryID::withMemoryName
MemoryID withMemoryName(const std::string &name) const
Definition: MemoryID.cpp:309
armarx::armem::MemoryID::operator!=
bool operator!=(const MemoryID &other) const
Definition: MemoryID.h:210
armarx::armem::MemoryID::str
std::string str(bool escapeDelimiters=true) const
Get a string representation of this memory ID.
Definition: MemoryID.cpp:101
armarx::armem
Definition: LegacyRobotStateMemoryAdapter.cpp:31
armarx::armem::MemoryID::instanceIndex
int instanceIndex
Definition: MemoryID.h:57
armarx::armem::contains
bool contains(const MemoryID &general, const MemoryID &specific)
Indicates whether general is "less specific" than, or equal to, specific, i.e.
Definition: MemoryID.cpp:459
armarx::armem::MemoryID::operator==
bool operator==(const MemoryID &other) const
Definition: MemoryID.cpp:372
armarx::armem::MemoryID::coreSegmentName
std::string coreSegmentName
Definition: MemoryID.h:53
armarx::armem::MemoryID::withProviderSegmentName
MemoryID withProviderSegmentName(const std::string &name) const
Definition: MemoryID.cpp:323
armarx::armem::MemoryID
A memory ID.
Definition: MemoryID.h:48
armarx::armem::MemoryID::withCoreSegmentName
MemoryID withCoreSegmentName(const std::string &name) const
Definition: MemoryID.cpp:316
armarx::armem::MemoryID::operator<
bool operator<(const MemoryID &rhs) const
Definition: MemoryID.cpp:382
armarx::armem::MemoryID::getEntitySnapshotID
MemoryID getEntitySnapshotID() const
Definition: MemoryID.cpp:235
armarx::armem::MemoryID::setProviderSegmentID
void setProviderSegmentID(const MemoryID &id)
Definition: MemoryID.cpp:285
armarx::armem::MemoryID::MemoryID
MemoryID()
Construct a default (empty) memory ID.
Definition: MemoryID.cpp:20
armarx::armem::MemoryID::hasTimestamp
bool hasTimestamp() const
Definition: MemoryID.h:115
armarx::armem::MemoryID::setEntitySnapshotID
void setEntitySnapshotID(const MemoryID &id)
Definition: MemoryID.cpp:297
armarx::armem::MemoryID::hasInstanceIndex
bool hasInstanceIndex() const
Definition: MemoryID.h:123
armarx::armem::MemoryID::getProviderSegmentID
MemoryID getProviderSegmentID() const
Definition: MemoryID.cpp:221
armarx::armem::MemoryID::hasGap
bool hasGap() const
Indicate whether this ID has a gap such as in 'Memory//MyProvider' (no core segment name).
Definition: MemoryID.cpp:129
armarx::armem::MemoryID::operator<<
friend std::ostream & operator<<(std::ostream &os, const MemoryID id)
Definition: MemoryID.cpp:453
armarx::armem::MemoryID::getAllItems
std::vector< std::string > getAllItems(bool escapeDelimiters=false) const
Get all levels as strings.
Definition: MemoryID.cpp:197
armarx::armem::MemoryID::operator>=
bool operator>=(const MemoryID &rhs) const
Definition: MemoryID.h:224
armarx::armem::MemoryID::entityName
std::string entityName
Definition: MemoryID.h:55
armarx::armem::MemoryID::setMemoryID
void setMemoryID(const MemoryID &id)
Definition: MemoryID.cpp:274
armarx::armem::MemoryID::hasEntityName
bool hasEntityName() const
Definition: MemoryID.h:111
armarx::armem::MemoryID::memoryName
std::string memoryName
Definition: MemoryID.h:52
armarx::armem::MemoryID::fromString
static MemoryID fromString(const std::string &string)
Alias for constructor from string.
Definition: MemoryID.cpp:153
armarx::core::time::DateTime
Represents a point in time.
Definition: DateTime.h:24
armarx::armem::MemoryID::clearTimestamp
void clearTimestamp()
Definition: MemoryID.h:119
armarx::armem::MemoryID::getCoreSegmentID
MemoryID getCoreSegmentID() const
Definition: MemoryID.cpp:214
armarx::armem::MemoryID::getEntityID
MemoryID getEntityID() const
Definition: MemoryID.cpp:228
armarx::armem::MemoryID::setEntityInstanceID
void setEntityInstanceID(const MemoryID &id)
Definition: MemoryID.cpp:303
armarx::armem::MemoryID::clearInstanceIndex
void clearInstanceIndex()
Definition: MemoryID.h:127
armarx::armem::MemoryID::withEntityName
MemoryID withEntityName(const std::string &name) const
Definition: MemoryID.cpp:330
armarx::armem::MemoryID::getMemoryID
MemoryID getMemoryID() const
Definition: MemoryID.cpp:207
std
Definition: Application.h:66
armarx::armem::MemoryID::hasProviderSegmentName
bool hasProviderSegmentName() const
Definition: MemoryID.h:107
armarx::armem::MemoryID::hasCoreSegmentName
bool hasCoreSegmentName() const
Definition: MemoryID.h:103
armarx::armem::MemoryID::hasMemoryName
bool hasMemoryName() const
Definition: MemoryID.h:99
Time.h
armarx::armem::MemoryID::withTimestamp
MemoryID withTimestamp(Time time) const
Definition: MemoryID.cpp:337
armarx::armem::MemoryID::getItems
std::vector< std::string > getItems(bool escapeDelimiters=false) const
Get the levels from root to first not defined level (excluding).
Definition: MemoryID.cpp:158
armarx::armem::MemoryID::withInstanceIndex
MemoryID withInstanceIndex(int index) const
Definition: MemoryID.cpp:344
armarx::armem::MemoryID::setEntityID
void setEntityID(const MemoryID &id)
Definition: MemoryID.cpp:291
std::hash< armarx::armem::MemoryID >::operator()
std::size_t operator()(const armarx::armem::MemoryID &id) const
Definition: MemoryID.h:278
armarx::armem::MemoryID::getLeafItem
std::string getLeafItem() const
Get the lowest defined level (or empty string if there is none).
Definition: MemoryID.cpp:116
armarx::core::time::DateTime::Invalid
static DateTime Invalid()
Definition: DateTime.cpp:60
armarx::armem::MemoryID::instanceIndexStr
std::string instanceIndexStr() const
Get the instance index as string.
Definition: MemoryID.cpp:357
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::armem::MemoryID::timestampStr
std::string timestampStr() const
Get the timestamp as string.
Definition: MemoryID.cpp:352
armarx::armem::MemoryID::instanceIndexFromStr
static int instanceIndexFromStr(const std::string &index)
Reconstruct an instance index from a string as returned by instanceIndexStr().
Definition: MemoryID.cpp:367
armarx::human::MemoryID
const armem::MemoryID MemoryID
Definition: memory_ids.cpp:29