4#include <system/collections/base_enumerator.h>
5#include <system/collections/base_kv_collection.h>
7namespace System {
namespace Collections {
namespace Generic {
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>
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;
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)
33 InitializeIteratorPointer(m_pointer);
35 UpdateIteratorPointer(m_pointer, m_iterator->first);
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)
43 InitializeIteratorPointer(m_pointer);
45 UpdateIteratorPointer(m_pointer, m_iterator->first);
50 : System::Details::NativeIteratorWrapperBase<typename Dict::map_t::key_type, typename Dict::map_t::const_iterator>(std::forward(other.m_iterator))
53 UpdateIteratorPointer(m_pointer, m_iterator->first);
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);
67 System::Details::IteratorDecrementer<typename Dict::map_t::const_iterator>::decrement(m_iterator);
69 UpdateIteratorPointer(m_pointer, m_iterator->first);
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);
80 System::Details::VirtualizedIteratorBase<typename Dict::map_t::key_type>*
CloneIterator()
const override
92template <
typename Dict>
97 typedef typename Dict::map_t::key_type
TKey;
116 return this->m_it->first;
118 return System::Default<TKey>();
130 return this->m_dict->ContainsKey(item);
135 TKey idx_get(
int index)
const override { ASPOSE_UNUSED(index);
throw System::InvalidOperationException(); }
140 return new KeyIterator<Dict>(this->m_dict->data().begin(), this->m_dict->data().end());
145 return new KeyIterator<Dict>(this->m_dict->data().end(), this->m_dict->data().end());
150 return new KeyIterator<Dict>(this->m_dict->data().begin(), this->m_dict->data().end());
155 return new KeyIterator<Dict>(this->m_dict->data().end(), this->m_dict->data().end());
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>
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;
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)
187 InitializeIteratorPointer(m_pointer);
189 UpdateIteratorPointer(m_pointer, m_iterator->second);
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)
197 InitializeIteratorPointer(m_pointer);
199 UpdateIteratorPointer(m_pointer, m_iterator->second);
204 : System::Details::NativeIteratorWrapperBase<typename Dict::map_t::mapped_type, typename Dict::map_t::const_iterator>(std::forward(other.m_iterator))
207 UpdateIteratorPointer(m_pointer, m_iterator->second);
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);
221 System::Details::IteratorDecrementer<typename Dict::map_t::const_iterator>::decrement(m_iterator);
223 UpdateIteratorPointer(m_pointer, m_iterator->second);
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);
234 System::Details::VirtualizedIteratorBase<typename Dict::map_t::mapped_type>*
CloneIterator()
const override
246template <
typename Dict>
251 typedef typename Dict::map_t::mapped_type
TValue;
270 return this->m_it->second;
272 return System::Default<TValue>();
284 return this->m_dict->ContainsValue(item);
289 TValue idx_get(
int index)
const override { ASPOSE_UNUSED(index);
throw System::InvalidOperationException(); }
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