Nebula
Loading...
Searching...
No Matches
keyvaluepair.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
13#include "core/types.h"
14
15//------------------------------------------------------------------------------
16namespace Util
17{
18template<class KEYTYPE, class VALUETYPE> class KeyValuePair
19{
20public:
24 KeyValuePair(const KEYTYPE& k, const VALUETYPE& v);
26 explicit KeyValuePair(const KEYTYPE& k);
48 bool operator==(const KEYTYPE& rhs) const;
50 bool operator!=(const KEYTYPE& rhs) const;
52 bool operator>(const KEYTYPE& rhs) const;
54 bool operator>=(const KEYTYPE& rhs) const;
56 bool operator<(const KEYTYPE& rhs) const;
58 bool operator<=(const KEYTYPE& rhs) const;
60 VALUETYPE& Value();
62 const KEYTYPE& Key() const;
64 const VALUETYPE& Value() const;
65
66protected:
67 KEYTYPE keyData = KEYTYPE();
68 VALUETYPE valueData = VALUETYPE();
69};
70
71//------------------------------------------------------------------------------
74template<class KEYTYPE, class VALUETYPE>
79
80//------------------------------------------------------------------------------
83template<class KEYTYPE, class VALUETYPE>
84KeyValuePair<KEYTYPE, VALUETYPE>::KeyValuePair(const KEYTYPE& k, const VALUETYPE& v) :
85 keyData(k),
86 valueData(v)
87{
88 // empty
89}
90
91//------------------------------------------------------------------------------
96template<class KEYTYPE, class VALUETYPE>
98 keyData(k)
99{
100 // empty
101}
102
103//------------------------------------------------------------------------------
106template<class KEYTYPE, class VALUETYPE>
108 keyData(rhs.keyData),
109 valueData(rhs.valueData)
110{
111 // empty
112}
113
114//------------------------------------------------------------------------------
117template<class KEYTYPE, class VALUETYPE>
119 keyData(std::move(rhs.keyData)),
120 valueData(std::move(rhs.valueData))
121{
122 // empty
123}
124
125//------------------------------------------------------------------------------
128template<class KEYTYPE, class VALUETYPE>
129void
131{
132 this->keyData = rhs.keyData;
133 this->valueData = rhs.valueData;
134}
135
136//------------------------------------------------------------------------------
139template<class KEYTYPE, class VALUETYPE>
140void
142{
143 this->keyData = std::move(rhs.keyData);
144 this->valueData = std::move(rhs.valueData);
145}
146
147//------------------------------------------------------------------------------
150template<class KEYTYPE, class VALUETYPE>
151bool
153{
154 return (this->keyData == rhs.keyData);
155}
156
157//------------------------------------------------------------------------------
160template<class KEYTYPE, class VALUETYPE>
161bool
163{
164 return (this->keyData != rhs.keyData);
165}
166
167//------------------------------------------------------------------------------
170template<class KEYTYPE, class VALUETYPE>
171bool
173{
174 return (this->keyData > rhs.keyData);
175}
176
177//------------------------------------------------------------------------------
180template<class KEYTYPE, class VALUETYPE>
181bool
183{
184 return (this->keyData >= rhs.keyData);
185}
186
187//------------------------------------------------------------------------------
190template<class KEYTYPE, class VALUETYPE>
191bool
193{
194 return (this->keyData < rhs.keyData);
195}
196
197//------------------------------------------------------------------------------
200template<class KEYTYPE, class VALUETYPE>
201bool
203{
204 return (this->keyData <= rhs.keyData);
205}
206
207//------------------------------------------------------------------------------
210template<class KEYTYPE, class VALUETYPE>
211bool
213{
214 return (this->keyData == rhs);
215}
216
217//------------------------------------------------------------------------------
220template<class KEYTYPE, class VALUETYPE>
221bool
223{
224 return (this->keyData != rhs);
225}
226
227//------------------------------------------------------------------------------
230template<class KEYTYPE, class VALUETYPE>
231bool
233{
234 return (this->keyData > rhs);
235}
236
237//------------------------------------------------------------------------------
240template<class KEYTYPE, class VALUETYPE>
241bool
243{
244 return (this->keyData >= rhs);
245}
246
247//------------------------------------------------------------------------------
250template<class KEYTYPE, class VALUETYPE>
251bool
252KeyValuePair<KEYTYPE, VALUETYPE>::operator<(const KEYTYPE& rhs) const
253{
254 return (this->keyData < rhs);
255}
256
257//------------------------------------------------------------------------------
260template<class KEYTYPE, class VALUETYPE>
261bool
262KeyValuePair<KEYTYPE, VALUETYPE>::operator<=(const KEYTYPE& rhs) const
263{
264 return (this->keyData <= rhs);
265}
266
267
268//------------------------------------------------------------------------------
271template<class KEYTYPE, class VALUETYPE>
272VALUETYPE&
274{
275 return this->valueData;
276}
277
278//------------------------------------------------------------------------------
281template<class KEYTYPE, class VALUETYPE>
282const KEYTYPE&
284{
285 return this->keyData;
286}
287
288//------------------------------------------------------------------------------
291template<class KEYTYPE, class VALUETYPE>
292const VALUETYPE&
294{
295 return this->valueData;
296}
297
298} // namespace Util
299//------------------------------------------------------------------------------
Key/Value pair objects are used by most assiociative container classes, like Dictionary or HashTable.
Definition keyvaluepair.h:19
KeyValuePair(KeyValuePair< KEYTYPE, VALUETYPE > &&rhs) noexcept
move constructor
Definition keyvaluepair.h:118
bool operator==(const KEYTYPE &rhs) const
equality operator
Definition keyvaluepair.h:212
void operator=(KeyValuePair< KEYTYPE, VALUETYPE > &&rhs) noexcept
move assignment operator
Definition keyvaluepair.h:141
const KEYTYPE & Key() const
read access to key
Definition keyvaluepair.h:283
KEYTYPE keyData
Definition keyvaluepair.h:67
bool operator>=(const KeyValuePair< KEYTYPE, VALUETYPE > &rhs) const
greater-or-equal operator
Definition keyvaluepair.h:182
bool operator==(const KeyValuePair< KEYTYPE, VALUETYPE > &rhs) const
equality operator
Definition keyvaluepair.h:152
VALUETYPE valueData
Definition keyvaluepair.h:68
bool operator!=(const KEYTYPE &rhs) const
inequality operator
Definition keyvaluepair.h:222
bool operator>(const KEYTYPE &rhs) const
greater operator
Definition keyvaluepair.h:232
void operator=(const KeyValuePair< KEYTYPE, VALUETYPE > &rhs)
assignment operator
Definition keyvaluepair.h:130
bool operator<=(const KeyValuePair< KEYTYPE, VALUETYPE > &rhs) const
lesser-or-equal operator
Definition keyvaluepair.h:202
bool operator<(const KEYTYPE &rhs) const
lesser operator
Definition keyvaluepair.h:252
bool operator<=(const KEYTYPE &rhs) const
lesser-or-equal operator
Definition keyvaluepair.h:262
bool operator!=(const KeyValuePair< KEYTYPE, VALUETYPE > &rhs) const
inequality operator
Definition keyvaluepair.h:162
KeyValuePair(const KeyValuePair< KEYTYPE, VALUETYPE > &rhs)
copy constructor
Definition keyvaluepair.h:107
KeyValuePair()
default constructor
Definition keyvaluepair.h:75
KeyValuePair(const KEYTYPE &k)
constructor with key and undefined value
Definition keyvaluepair.h:97
bool operator>(const KeyValuePair< KEYTYPE, VALUETYPE > &rhs) const
greater operator
Definition keyvaluepair.h:172
VALUETYPE & Value()
read/write access to value
Definition keyvaluepair.h:273
bool operator<(const KeyValuePair< KEYTYPE, VALUETYPE > &rhs) const
lesser operator
Definition keyvaluepair.h:192
KeyValuePair(const KEYTYPE &k, const VALUETYPE &v)
constructor with key and value
Definition keyvaluepair.h:84
bool operator>=(const KEYTYPE &rhs) const
greater-or-equal operator
Definition keyvaluepair.h:242
const VALUETYPE & Value() const
read access to key
Definition keyvaluepair.h:293
A pinned array is an array which manages its own virtual memory.
Definition String.cs:6