ArMemError.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdexcept>
4
5#include <SimoxUtility/meta/type_name.h>
6
7namespace armarx::armem
8{
9 class MemoryID;
10}
11
13{
14
15 /**
16 * @brief Base class for all exceptions thrown by the armem library.
17 */
18 class ArMemError : public std::runtime_error
19 {
20 public:
21 ArMemError(const std::string& msg);
22 };
23
24 /**
25 * @brief Indicates that an argument was invalid.
26 */
28 {
29 public:
30 InvalidArgument(const std::string& argument,
31 const std::string& function,
32 const std::string& message);
33
34 static std::string makeMsg(const std::string& argument,
35 const std::string& function,
36 const std::string& message);
37 };
38
39 /**
40 * @brief Indicates that a name in a given ID does not match a container's own name.
41 */
43 {
44 public:
45 ContainerNameMismatch(const std::string& gottenName,
46 const std::string& containerTerm,
47 const std::string& containerName);
48
49 static std::string makeMsg(const std::string& gottenName,
50 const std::string& containerTerm,
51 const std::string& containerName);
52 };
53
54 /**
55 * @brief Indicates that a name in a given ID does not match a container's own name.
56 */
58 {
59 public:
60 ContainerEntryAlreadyExists(const std::string& existingTerm,
61 const std::string& existingName,
62 const std::string& ownTerm,
63 const std::string& ownName);
64
65 static std::string makeMsg(const std::string& existingTerm,
66 const std::string& existingName,
67 const std::string& ownTerm,
68 const std::string& ownName);
69 };
70
71 /**
72 * @brief Indicates that a container did not have an entry under a given name.
73 */
74 class MissingEntry : public ArMemError
75 {
76 public:
77 template <class MissingT, class ContainerT>
78 static MissingEntry
79 create(const std::string& missingKey, const ContainerT& container)
80 {
81 return MissingEntry(MissingT::getLevelName(),
82 missingKey,
83 ContainerT::getLevelName(),
84 container.getKeyString(),
85 container.size());
86 }
87
88 MissingEntry(const std::string& missingTerm,
89 const std::string& missingName,
90 const std::string& containerTerm,
91 const std::string& containerName,
92 size_t containerSize);
93
94 static std::string makeMsg(const std::string& missingTerm,
95 const std::string& missingName,
96 const std::string& containerTerm,
97 const std::string& containerName,
98 size_t size);
99 };
100
101 /**
102 * @brief Indicates that an operation requiring at least one element to exist
103 * failed because there were no such entries.
104 */
106 {
107 public:
108 NoSuchEntries(const std::string& missingTerm,
109 const std::string& containerTerm,
110 const MemoryID& containerID,
111 const std::string& message = "");
112
113 static std::string makeMsg(const std::string& missingTerm,
114 const std::string& containerTerm,
115 const MemoryID& containerID,
116 const std::string& message = "");
117 };
118
119 /**
120 * @brief Indicates that a container did have an entry, but the entry's data was
121 * null when trying to access it.
122 */
123 class MissingData : public ArMemError
124 {
125 public:
126 MissingData(const std::string& missingTerm,
127 const std::string& missingName,
128 const std::string& ownTerm,
129 const std::string& ownName);
130
131 static std::string makeMsg(const std::string& missingTerm,
132 const std::string& missingName,
133 const std::string& ownTerm,
134 const std::string& ownName);
135 };
136
137 /**
138 * @brief Indicates that a string could not be parsed as integer.
139 */
141 {
142 public:
143 ParseIntegerError(std::string string, std::string semanticName);
144
145 static std::string makeMsg(std::string string, std::string semanticName);
146 };
147
148 /**
149 * @brief Indicates that a memory ID is invalid, e.g. does not contain necessary information.
150 */
152 {
153 public:
154 InvalidMemoryID(const MemoryID& id, const std::string& message);
155
156 static std::string makeMsg(const MemoryID& id, const std::string& message);
157 };
158
159 /**
160 * @brief Indicates that an entity's history was queried, but is empty.
161 */
163 {
164 public:
165 EntityHistoryEmpty(const std::string& entityName, const std::string& message = "");
166
167 static std::string makeMsg(const std::string& entityName, const std::string& message = "");
168 };
169
170 /**
171 * @brief Indicates that an entity's history was queried, but is empty.
172 */
174 {
175 public:
176 template <class QueryType>
177 UnknownQueryType(const std::string& term, const QueryType& query) :
178 UnknownQueryType(term, simox::meta::get_type_name(query))
179 {
180 }
181
182 UnknownQueryType(const std::string& term, const std::string& typeName);
183
184 static std::string makeMsg(const std::string& term, const std::string& typeName);
185 };
186
187 /**
188 * @brief Indicates that a query resulted in an Error.
189 */
190 class QueryFailed : public ArMemError
191 {
192 public:
193 QueryFailed(const std::string& memory, const std::string& message = "");
194
195 static std::string makeMsg(const std::string& memory, const std::string& message = "");
196 };
197
198 /**
199 * @brief Indicates that something went wrong when accessing the filesystem.
200 */
201 class IOError : public ArMemError
202 {
203 public:
204 IOError(const std::string& path, const std::string& message = "");
205
206 static std::string makeMsg(const std::string& path, const std::string& message = "");
207
208
209 std::string path;
210 };
211
212 /**
213 * @brief Indicates that a proxy required for an operation wasn't usable.
214 */
215 class ProxyNotSet : public ArMemError
216 {
217 public:
218 ProxyNotSet(const std::string& proxyName, const std::string& message = "");
219
220 static std::string makeMsg(const std::string& proxyName, const std::string& message = "");
221 };
222
223 /**
224 * @brief Indicates that a ReadStream is already polling when a polling method was called.
225 */
227 {
228 public:
229 ReadStreamAlreadyPolling(const MemoryID& queriedId, const std::string& calledFunction);
230
231 static std::string makeMsg(const MemoryID& queriedId, const std::string& calledFunction);
232 };
233
234} // namespace armarx::armem::error
ArMemError(const std::string &msg)
ContainerEntryAlreadyExists(const std::string &existingTerm, const std::string &existingName, const std::string &ownTerm, const std::string &ownName)
static std::string makeMsg(const std::string &existingTerm, const std::string &existingName, const std::string &ownTerm, const std::string &ownName)
static std::string makeMsg(const std::string &gottenName, const std::string &containerTerm, const std::string &containerName)
ContainerNameMismatch(const std::string &gottenName, const std::string &containerTerm, const std::string &containerName)
EntityHistoryEmpty(const std::string &entityName, const std::string &message="")
static std::string makeMsg(const std::string &entityName, const std::string &message="")
static std::string makeMsg(const std::string &path, const std::string &message="")
IOError(const std::string &path, const std::string &message="")
static std::string makeMsg(const std::string &argument, const std::string &function, const std::string &message)
InvalidArgument(const std::string &argument, const std::string &function, const std::string &message)
static std::string makeMsg(const MemoryID &id, const std::string &message)
InvalidMemoryID(const MemoryID &id, const std::string &message)
MissingData(const std::string &missingTerm, const std::string &missingName, const std::string &ownTerm, const std::string &ownName)
static std::string makeMsg(const std::string &missingTerm, const std::string &missingName, const std::string &ownTerm, const std::string &ownName)
static std::string makeMsg(const std::string &missingTerm, const std::string &missingName, const std::string &containerTerm, const std::string &containerName, size_t size)
static MissingEntry create(const std::string &missingKey, const ContainerT &container)
Definition ArMemError.h:79
MissingEntry(const std::string &missingTerm, const std::string &missingName, const std::string &containerTerm, const std::string &containerName, size_t containerSize)
NoSuchEntries(const std::string &missingTerm, const std::string &containerTerm, const MemoryID &containerID, const std::string &message="")
static std::string makeMsg(const std::string &missingTerm, const std::string &containerTerm, const MemoryID &containerID, const std::string &message="")
static std::string makeMsg(std::string string, std::string semanticName)
ParseIntegerError(std::string string, std::string semanticName)
ProxyNotSet(const std::string &proxyName, const std::string &message="")
static std::string makeMsg(const std::string &proxyName, const std::string &message="")
QueryFailed(const std::string &memory, const std::string &message="")
static std::string makeMsg(const std::string &memory, const std::string &message="")
ReadStreamAlreadyPolling(const MemoryID &queriedId, const std::string &calledFunction)
static std::string makeMsg(const MemoryID &queriedId, const std::string &calledFunction)
UnknownQueryType(const std::string &term, const QueryType &query)
Definition ArMemError.h:177
static std::string makeMsg(const std::string &term, const std::string &typeName)
Brief description of class memory.
Definition memory.h:39
Definition Impl.cpp:41