CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
keyvalue_collection.h
1
2#pragma once
3
4#include <system/collections/base_enumerator.h>
5#include <system/collections/base_kv_collection.h>
6
7namespace System { namespace Collections { namespace Generic {
8
11template <typename Dict>
13 : public System::Details::NativeIteratorWrapperBase<typename Dict::map_t::key_type, typename Dict::map_t::const_iterator>
14 , private System::Details::IteratorPointerUpdater<typename Dict::map_t::key_type, false>
15{
16 using System::Details::NativeIteratorWrapperBase<typename Dict::map_t::key_type, typename Dict::map_t::const_iterator>::m_iterator;
17 using System::Details::NativeIteratorWrapperBase<typename Dict::map_t::key_type, typename Dict::map_t::const_iterator>::m_end;
18 using System::Details::VirtualizedIteratorBase<typename Dict::map_t::key_type>::m_is_end;
19 using System::Details::VirtualizedIteratorBase<typename Dict::map_t::key_type>::m_pointer;
20 using System::Details::IteratorPointerUpdater<typename Dict::map_t::key_type, false>::InitializeIteratorPointer;
21 using System::Details::IteratorPointerUpdater<typename Dict::map_t::key_type, false>::UpdateIteratorPointer;
22
23public:
27 KeyIterator(typename Dict::map_t::const_iterator &&iterator, typename Dict::map_t::const_iterator &&end) noexcept
28 : System::Details::NativeIteratorWrapperBase<typename Dict::map_t::key_type, typename Dict::map_t::const_iterator>(
29 std::forward<typename Dict::map_t::const_iterator>(iterator),
30 std::forward<typename Dict::map_t::const_iterator>(end)
31 )
32 {
33 InitializeIteratorPointer(m_pointer);
34 if (!m_is_end)
35 UpdateIteratorPointer(m_pointer, m_iterator->first);
36 }
40 KeyIterator(const typename Dict::map_t::const_iterator &iterator, const typename Dict::map_t::const_iterator &end)
41 : System::Details::NativeIteratorWrapperBase<typename Dict::map_t::key_type, typename Dict::map_t::const_iterator>(iterator, end)
42 {
43 InitializeIteratorPointer(m_pointer);
44 if (!m_is_end)
45 UpdateIteratorPointer(m_pointer, m_iterator->first);
46 }
49 KeyIterator(KeyIterator &&other) noexcept
50 : System::Details::NativeIteratorWrapperBase<typename Dict::map_t::key_type, typename Dict::map_t::const_iterator>(std::forward(other.m_iterator))
51 {
52 if (!m_is_end)
53 UpdateIteratorPointer(m_pointer, m_iterator->first);
54 }
56 virtual ~KeyIterator() = default;
57
59 void IncrementIterator() override
60 {
61 if (System::Details::NativeIteratorWrapperBase<typename Dict::map_t::key_type, typename Dict::map_t::const_iterator>::IteratorIncrementImplementation())
62 UpdateIteratorPointer(m_pointer, m_iterator->first);
63 }
65 void DecrementIterator() override
66 {
67 System::Details::IteratorDecrementer<typename Dict::map_t::const_iterator>::decrement(m_iterator);
68 m_is_end = false;
69 UpdateIteratorPointer(m_pointer, m_iterator->first);
70 }
73 void ShiftIteratorBy(std::ptrdiff_t offset) override
74 {
75 if (System::Details::NativeIteratorWrapperBase<typename Dict::map_t::key_type, typename Dict::map_t::const_iterator>::IteratorShiftImplementation(offset))
76 UpdateIteratorPointer(m_pointer, m_iterator->first);
77 }
80 System::Details::VirtualizedIteratorBase<typename Dict::map_t::key_type>* CloneIterator() const override
81 {
82 return new KeyIterator(m_iterator, m_end);
83 }
84};
85
86
92template <typename Dict>
93class ASPOSECPP_SHARED_CLASS _KeyCollection : public BaseKVCollection<Dict, typename Dict::map_t::key_type>
94{
95public:
97 typedef typename Dict::map_t::key_type TKey;
98
101 _KeyCollection(const typename Dict::Ptr& dict) : BaseKVCollection<Dict, typename Dict::map_t::key_type>(dict) {}
102
103 // IEnumerable
105 class Enumerator : public BaseEnumerator<typename Dict::map_t, TKey>
106 {
107 public:
110 Enumerator(const typename Dict::Ptr& dict) : BaseEnumerator<typename Dict::map_t, TKey>(dict, dict->data()) { }
114 {
115 if (this->IsValid())
116 return this->m_it->first;
117 else
118 return System::Default<TKey>();
119 }
120 };
123 SharedPtr<IEnumerator<TKey> > GetEnumerator() override { return MakeObject<Enumerator>(this->m_dict); }
124
128 bool Contains(const TKey& item) const override
129 {
130 return this->m_dict->ContainsKey(item);
131 }
132
133 // IList
135 TKey idx_get(int index) const override { ASPOSE_UNUSED(index); throw System::InvalidOperationException(); }
136
138 System::Details::VirtualizedIteratorBase<TKey>* virtualizeBeginIterator() override
139 {
140 return new KeyIterator<Dict>(this->m_dict->data().begin(), this->m_dict->data().end());
141 }
143 System::Details::VirtualizedIteratorBase<TKey>* virtualizeEndIterator() override
144 {
145 return new KeyIterator<Dict>(this->m_dict->data().end(), this->m_dict->data().end());
146 }
148 System::Details::VirtualizedIteratorBase<TKey>* virtualizeBeginConstIterator() const override
149 {
150 return new KeyIterator<Dict>(this->m_dict->data().begin(), this->m_dict->data().end());
151 }
153 System::Details::VirtualizedIteratorBase<TKey>* virtualizeEndConstIterator() const override
154 {
155 return new KeyIterator<Dict>(this->m_dict->data().end(), this->m_dict->data().end());
156 }
157
158protected:
160 ~_KeyCollection() override {}
161};
162
165template <typename Dict>
167 : public System::Details::NativeIteratorWrapperBase<typename Dict::map_t::mapped_type, typename Dict::map_t::const_iterator>
168 , private System::Details::IteratorPointerUpdater<typename Dict::map_t::mapped_type, false>
169{
170 using System::Details::NativeIteratorWrapperBase<typename Dict::map_t::mapped_type, typename Dict::map_t::const_iterator>::m_iterator;
171 using System::Details::NativeIteratorWrapperBase<typename Dict::map_t::mapped_type, typename Dict::map_t::const_iterator>::m_end;
172 using System::Details::VirtualizedIteratorBase<typename Dict::map_t::mapped_type>::m_is_end;
173 using System::Details::VirtualizedIteratorBase<typename Dict::map_t::mapped_type>::m_pointer;
174 using System::Details::IteratorPointerUpdater<typename Dict::map_t::mapped_type, false>::InitializeIteratorPointer;
175 using System::Details::IteratorPointerUpdater<typename Dict::map_t::mapped_type, false>::UpdateIteratorPointer;
176
177public:
181 ValueIterator(typename Dict::map_t::const_iterator &&iterator, typename Dict::map_t::const_iterator &&end) noexcept
182 : System::Details::NativeIteratorWrapperBase<typename Dict::map_t::mapped_type, typename Dict::map_t::const_iterator>(
183 std::forward<typename Dict::map_t::const_iterator>(iterator),
184 std::forward<typename Dict::map_t::const_iterator>(end)
185 )
186 {
187 InitializeIteratorPointer(m_pointer);
188 if (!m_is_end)
189 UpdateIteratorPointer(m_pointer, m_iterator->second);
190 }
194 ValueIterator(const typename Dict::map_t::const_iterator &iterator, const typename Dict::map_t::const_iterator &end)
195 : System::Details::NativeIteratorWrapperBase<typename Dict::map_t::mapped_type, typename Dict::map_t::const_iterator>(iterator, end)
196 {
197 InitializeIteratorPointer(m_pointer);
198 if (!m_is_end)
199 UpdateIteratorPointer(m_pointer, m_iterator->second);
200 }
203 ValueIterator(ValueIterator &&other) noexcept
204 : System::Details::NativeIteratorWrapperBase<typename Dict::map_t::mapped_type, typename Dict::map_t::const_iterator>(std::forward(other.m_iterator))
205 {
206 if (!m_is_end)
207 UpdateIteratorPointer(m_pointer, m_iterator->second);
208 }
210 virtual ~ValueIterator() = default;
211
213 void IncrementIterator() override
214 {
215 if (System::Details::NativeIteratorWrapperBase<typename Dict::map_t::mapped_type, typename Dict::map_t::const_iterator>::IteratorIncrementImplementation())
216 UpdateIteratorPointer(m_pointer, m_iterator->second);
217 }
219 void DecrementIterator() override
220 {
221 System::Details::IteratorDecrementer<typename Dict::map_t::const_iterator>::decrement(m_iterator);
222 m_is_end = false;
223 UpdateIteratorPointer(m_pointer, m_iterator->second);
224 }
227 void ShiftIteratorBy(std::ptrdiff_t offset) override
228 {
229 if (System::Details::NativeIteratorWrapperBase<typename Dict::map_t::mapped_type, typename Dict::map_t::const_iterator>::IteratorShiftImplementation(offset))
230 UpdateIteratorPointer(m_pointer, m_iterator->second);
231 }
234 System::Details::VirtualizedIteratorBase<typename Dict::map_t::mapped_type>* CloneIterator() const override
235 {
236 return new ValueIterator(m_iterator, m_end);
237 }
238};
239
240
246template <typename Dict>
247class ASPOSECPP_SHARED_CLASS _ValueCollection : public BaseKVCollection<Dict, typename Dict::map_t::mapped_type>
248{
249public:
251 typedef typename Dict::map_t::mapped_type TValue;
252
255 _ValueCollection(const typename Dict::Ptr& dict) : BaseKVCollection<Dict, typename Dict::map_t::mapped_type>(dict) {}
256
257 // IEnumerable
259 class Enumerator : public BaseEnumerator<typename Dict::map_t, TValue>
260 {
261 public:
264 Enumerator(const typename Dict::Ptr& dict) : BaseEnumerator<typename Dict::map_t, TValue>(dict, dict->data()) { }
268 {
269 if (this->IsValid())
270 return this->m_it->second;
271 else
272 return System::Default<TValue>();
273 }
274 };
277 SharedPtr<IEnumerator<TValue> > GetEnumerator() override { return MakeObject<Enumerator>(this->m_dict); }
278
282 bool Contains(const TValue& item) const override
283 {
284 return this->m_dict->ContainsValue(item);
285 }
286
287 // IList
289 TValue idx_get(int index) const override { ASPOSE_UNUSED(index); throw System::InvalidOperationException(); }
290
292 System::Details::VirtualizedIteratorBase<TValue>* virtualizeBeginIterator() override
293 {
294 return new ValueIterator<Dict>(this->m_dict->data().begin(), this->m_dict->data().end());
295 }
297 System::Details::VirtualizedIteratorBase<TValue>* virtualizeEndIterator() override
298 {
299 return new ValueIterator<Dict>(this->m_dict->data().end(), this->m_dict->data().end());
300 }
302 System::Details::VirtualizedIteratorBase<TValue>* virtualizeBeginConstIterator() const override
303 {
304 return new ValueIterator<Dict>(this->m_dict->data().begin(), this->m_dict->data().end());
305 }
307 System::Details::VirtualizedIteratorBase<TValue>* virtualizeEndConstIterator() const override
308 {
309 return new ValueIterator<Dict>(this->m_dict->data().end(), this->m_dict->data().end());
310 }
311
312protected:
314 ~_ValueCollection() override {}
315};
316
317}}} // namespace System::Collections::Generic
Enumerator to iterate through keys.
Definition: keyvalue_collection.h:106
MakeConstRef_t< TKey > get_Current() const override
Gets current key.
Definition: keyvalue_collection.h:113
Enumerator(const typename Dict::Ptr &dict)
Creates key enumerator for specified dictionary.
Definition: keyvalue_collection.h:110
Collection of Dictionary's keys. References collection, doesn't copy anything. Objects of this class ...
Definition: keyvalue_collection.h:94
TKey idx_get(int index) const override
Implements IList method. Not supported.
Definition: keyvalue_collection.h:135
_KeyCollection(const typename Dict::Ptr &dict)
Initializes collection referencing specified dictionary.
Definition: keyvalue_collection.h:101
~_KeyCollection() override
Destructor.
Definition: keyvalue_collection.h:160
System::Details::VirtualizedIteratorBase< TKey > * virtualizeBeginConstIterator() const override
Gets the implementation of begin const iterator for the current container.
Definition: keyvalue_collection.h:148
Dict::map_t::key_type TKey
Key type.
Definition: keyvalue_collection.h:97
System::Details::VirtualizedIteratorBase< TKey > * virtualizeEndIterator() override
Gets the implementation of end iterator for the current container.
Definition: keyvalue_collection.h:143
SharedPtr< IEnumerator< TKey > > GetEnumerator() override
Gets enumerator iterating through keys.
Definition: keyvalue_collection.h:123
System::Details::VirtualizedIteratorBase< TKey > * virtualizeEndConstIterator() const override
Gets the implementation of end const iterator for the current container.
Definition: keyvalue_collection.h:153
bool Contains(const TKey &item) const override
Checks if item is present in container.
Definition: keyvalue_collection.h:128
System::Details::VirtualizedIteratorBase< TKey > * virtualizeBeginIterator() override
Gets the implementation of begin iterator for the current container.
Definition: keyvalue_collection.h:138
Enumerator to iterate through values.
Definition: keyvalue_collection.h:260
Enumerator(const typename Dict::Ptr &dict)
Creates value enumerator for specified dictionary.
Definition: keyvalue_collection.h:264
MakeConstRef_t< TValue > get_Current() const override
Gets current value.
Definition: keyvalue_collection.h:267
Collection of Dictionary's values. References collection, doesn't copy anything. Objects of this clas...
Definition: keyvalue_collection.h:248
System::Details::VirtualizedIteratorBase< TValue > * virtualizeEndConstIterator() const override
Gets the implementation of end const iterator for the current container.
Definition: keyvalue_collection.h:307
System::Details::VirtualizedIteratorBase< TValue > * virtualizeBeginIterator() override
Gets the implementation of begin iterator for the current container.
Definition: keyvalue_collection.h:292
TValue idx_get(int index) const override
Implements IList method. Not supported.
Definition: keyvalue_collection.h:289
Dict::map_t::mapped_type TValue
Value type.
Definition: keyvalue_collection.h:251
SharedPtr< IEnumerator< TValue > > GetEnumerator() override
Gets enumerator iterating through values.
Definition: keyvalue_collection.h:277
~_ValueCollection() override
Destructor.
Definition: keyvalue_collection.h:314
bool Contains(const TValue &item) const override
Checks if item is present in container.
Definition: keyvalue_collection.h:282
System::Details::VirtualizedIteratorBase< TValue > * virtualizeEndIterator() override
Gets the implementation of end iterator for the current container.
Definition: keyvalue_collection.h:297
_ValueCollection(const typename Dict::Ptr &dict)
Initializes collection referencing specified dictionary.
Definition: keyvalue_collection.h:255
System::Details::VirtualizedIteratorBase< TValue > * virtualizeBeginConstIterator() const override
Gets the implementation of begin const iterator for the current container.
Definition: keyvalue_collection.h:302
Enumerator definition to wrap STL-styled types for C#-styled usage. Makes no assertions on container ...
Definition: base_enumerator.h:18
Holds common code for collections of keys or values. Objects of this class should only be allocated u...
Definition: base_kv_collection.h:18
Dictionary iterator that provides key access.
Definition: keyvalue_collection.h:15
virtual ~KeyIterator()=default
Destructor.
void IncrementIterator() override
Moves the iterator step forward.
Definition: keyvalue_collection.h:59
KeyIterator(KeyIterator &&other) noexcept
Move constructor.
Definition: keyvalue_collection.h:49
System::Details::VirtualizedIteratorBase< typename Dict::map_t::key_type > * CloneIterator() const override
Clones current iterator.
Definition: keyvalue_collection.h:80
KeyIterator(typename Dict::map_t::const_iterator &&iterator, typename Dict::map_t::const_iterator &&end) noexcept
Constructor.
Definition: keyvalue_collection.h:27
void DecrementIterator() override
Moves the iterator step back.
Definition: keyvalue_collection.h:65
void ShiftIteratorBy(std::ptrdiff_t offset) override
Moves the iterator by the specified number of steps.
Definition: keyvalue_collection.h:73
KeyIterator(const typename Dict::map_t::const_iterator &iterator, const typename Dict::map_t::const_iterator &end)
Constructor.
Definition: keyvalue_collection.h:40
Dictionary iterator that provides value access.
Definition: keyvalue_collection.h:169
ValueIterator(const typename Dict::map_t::const_iterator &iterator, const typename Dict::map_t::const_iterator &end)
Constructor.
Definition: keyvalue_collection.h:194
ValueIterator(typename Dict::map_t::const_iterator &&iterator, typename Dict::map_t::const_iterator &&end) noexcept
Constructor.
Definition: keyvalue_collection.h:181
void IncrementIterator() override
Moves the iterator step forward.
Definition: keyvalue_collection.h:213
System::Details::VirtualizedIteratorBase< typename Dict::map_t::mapped_type > * CloneIterator() const override
Clones current iterator.
Definition: keyvalue_collection.h:234
void ShiftIteratorBy(std::ptrdiff_t offset) override
Moves the iterator by the specified number of steps.
Definition: keyvalue_collection.h:227
virtual ~ValueIterator()=default
Destructor.
void DecrementIterator() override
Moves the iterator step back.
Definition: keyvalue_collection.h:219
ValueIterator(ValueIterator &&other) noexcept
Move constructor.
Definition: keyvalue_collection.h:203
Pointer class to wrap types being allocated on heap. Use it to manage memory for classes inheriting O...
Definition: smart_ptr.h:180
Definition: db_command.h:9
typename MakeConstRef< T >::type MakeConstRef_t
Helper type for MakeConstRef modifier.
Definition: make_const_ref.h:20