CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
collection.h
1
2#ifndef _aspose_system_collections_object_model_collection_h
3#define _aspose_system_collections_object_model_collection_h
4
5#include <iterator>
6
7#include <system/string.h>
8#include <system/collections/list.h>
9
10namespace System { namespace Collections { namespace ObjectModel {
11
17template<class T>
18class ASPOSECPP_SHARED_CLASS Collection : public Generic::IList<T>
19{
22public:
24 Collection() : items(MakeObject<System::Collections::Generic::List<T>>())
25 {}
26
28 {
29 if (list == nullptr)
30 throw ArgumentNullException(u"list");
31 }
32
33
37 {
38 return items;
39 }
43 {
44 return items;
45 }
46
49 int get_Count() const override
50 {
51 return items->get_Count();
52 }
56 virtual T idx_get(int index) const override
57 {
58 if (index < 0 || index >= get_Count())
59 {
60 throw ArgumentOutOfRangeException(u"index");
61 }
62
63 return items->idx_get(index);
64 }
68 virtual void idx_set(int index, T value) override
69 {
70 if (index < 0 || index >= get_Count())
71 {
72 throw ArgumentOutOfRangeException(u"index");
73 }
74 items->idx_set(index, value);
75 }
79 T& operator[](int index)
80 {
81 if (index < 0 || index >= get_Count())
82 {
83 throw ArgumentOutOfRangeException(u"index");
84 }
85
86 return items->idx_get(index);
87 }
91 const T& operator[](int index) const
92 {
93 if (index < 0 || index >= get_Count())
94 {
95 throw ArgumentOutOfRangeException(u"index");
96 }
97 return items->idx_get(index);
98 }
99
102 virtual void Add(const T& item) override
103 {
104 int index = get_Count();
105 InsertItem(index, item);
106 }
108 void Clear() override
109 {
110 ClearItems();
111 }
115 bool Contains(const T& item) const override
116 {
117 return items->Contains(item);
118 }
122 {
123 return items->GetEnumerator();
124 }
128 int IndexOf(const T& item) const override
129 {
130 return items->IndexOf(item);
131 }
135 void Insert(int index, const T& item) override
136 {
137 if (index < 0 || index > get_Count())
138 {
139 throw ArgumentOutOfRangeException(u"index");
140 }
141
142 InsertItem(index, item);
143 }
147 bool Remove(const T& item) override
148 {
149 int index = items->IndexOf(item);
150 if (index < 0)
151 {
152 return false;
153 }
154
155 RemoveItem(index);
156 return true;
157 }
160 void RemoveAt(int index) override {
161
162 if (index < 0 || index >= get_Count())
163 {
164 throw ArgumentOutOfRangeException(u"index");
165 }
166
167 RemoveItem(index);
168 }
169
173 virtual void CopyTo(ArrayPtr<T> arr, int index) override
174 {
175 items->CopyTo(arr, index);
176 }
177
180 void SetTemplateWeakPtr(uint32_t argument) override
181 {
182 items->SetTemplateWeakPtr(argument);
183 }
184
186 template <typename U>
187 class reverse_iterator_prototype: public Details::BaseIterator<std::bidirectional_iterator_tag, U, std::ptrdiff_t>
188 {
189 private:
192 int m_size;
193 int m_index;
194 public:
196 : m_size(0)
197 , m_index(-1)
198 {}
200 : m_list(list)
201 , m_size(list->get_Count())
202 , m_index(m_size-1)
203 {}
204
205 const U operator*() const {
206 return m_list->idx_get(m_index);
207 }
208
210 {
211 if (m_index >= 0) {
212 --m_index;
213 }
214 return *this;
215 }
216
218 {
219 if (m_index < m_size) {
220 ++m_index;
221 }
222 return *this;
223 }
224
226 return m_index != it.m_index;
227 }
228
230 return m_index == it.m_index;
231 }
232 };
233
236
239 reverse_iterator rbegin() noexcept { return reverse_iterator(items); }
242 reverse_iterator rend() noexcept { return reverse_iterator(); }
243
246 const_reverse_iterator rbegin() const noexcept { return reverse_iterator(items); }
249 const_reverse_iterator rend() const noexcept { return reverse_iterator(); }
250
253 const_reverse_iterator crbegin() const noexcept { return reverse_iterator(items); }
256 const_reverse_iterator crend() const noexcept { return reverse_iterator(); }
257
259 System::Details::VirtualizedIteratorBase<T>* virtualizeBeginIterator() override
260 {
261 return items->virtualizeBeginIterator();
262 }
264 System::Details::VirtualizedIteratorBase<T>* virtualizeEndIterator() override
265 {
266 return items->virtualizeEndIterator();
267 }
269 System::Details::VirtualizedIteratorBase<T>* virtualizeBeginConstIterator() const override
270 {
271 return items->virtualizeBeginConstIterator();
272 }
274 System::Details::VirtualizedIteratorBase<T>* virtualizeEndConstIterator() const override
275 {
276 return items->virtualizeEndConstIterator();
277 }
278
279protected:
281 ~Collection() override {}
282
284 virtual void ClearItems()
285 {
286 items->Clear();
287 }
291 virtual void InsertItem(int index, const T& item)
292 {
293 items->Insert(index, item);
294 }
297 virtual void RemoveItem(int index)
298 {
299 items->RemoveAt(index);
300 }
304 virtual void SetItem(int index, const T& item)
305 {
306 items->idx_set(index, item);
307 }
308};
309
310}}} // namespace System::Collections::ObjectModel
311
312#endif // _aspose_system_collections_object_model_collection_h
Interface of indexed container of elements. Objects of this class should only be allocated using Syst...
Definition: ilist.h:19
List pointer with access operators. This type is a pointer to manage other object's deletion....
Definition: list.h:38
Iterates elements of the sequence container in the reverse order.
Definition: collection.h:188
bool operator==(const reverse_iterator_prototype &it) const
Definition: collection.h:229
bool operator!=(const reverse_iterator_prototype &it) const
Definition: collection.h:225
reverse_iterator_prototype & operator++()
Definition: collection.h:209
reverse_iterator_prototype & operator--()
Definition: collection.h:217
reverse_iterator_prototype(const SharedPtr< Generic::IList< U > > &list)
Definition: collection.h:199
Base type for generic collection. Objects of this class should only be allocated using System::MakeOb...
Definition: collection.h:19
bool Remove(const T &item) override
Removes specific item.
Definition: collection.h:147
virtual void RemoveItem(int index)
Removes item from specified position.
Definition: collection.h:297
int IndexOf(const T &item) const override
Looks for element in collection.
Definition: collection.h:128
const_reverse_iterator rbegin() const noexcept
Gets a reverse iterator to the last element of the const-qualified collection (first in reverse).
Definition: collection.h:246
void SetTemplateWeakPtr(uint32_t argument) override
Makes stored pointers weak (if applicable).
Definition: collection.h:180
const_reverse_iterator crend() const noexcept
Gets a reverse iterator for a non-existent const-qualified element before the start of the collection...
Definition: collection.h:256
virtual T idx_get(int index) const override
Gets value at specified index.
Definition: collection.h:56
virtual void InsertItem(int index, const T &item)
Inserts item into specified position.
Definition: collection.h:291
bool Contains(const T &item) const override
Checks if item is present in collection.
Definition: collection.h:115
const Generic::ListPtr< T > get_Items() const
Internal data structure accessor.
Definition: collection.h:42
const_reverse_iterator rend() const noexcept
Gets a reverse iterator for a non-existent element before the start of the const-qualified collection...
Definition: collection.h:249
virtual void idx_set(int index, T value) override
Sets value at specified index.
Definition: collection.h:68
T & operator[](int index)
Gets value at specified index.
Definition: collection.h:79
void RemoveAt(int index) override
Removes item at specific position.
Definition: collection.h:160
virtual void CopyTo(ArrayPtr< T > arr, int index) override
Copies collection elements into existing array elements.
Definition: collection.h:173
reverse_iterator rend() noexcept
Gets a reverse iterator for a non-existent element before the start of the collection.
Definition: collection.h:242
reverse_iterator_prototype< T > reverse_iterator
Definition: collection.h:234
reverse_iterator_prototype< T > const_reverse_iterator
Definition: collection.h:235
System::Details::VirtualizedIteratorBase< T > * virtualizeEndConstIterator() const override
Gets the implementation of end const iterator for the current container.
Definition: collection.h:274
virtual void SetItem(int index, const T &item)
Sets item at specified position.
Definition: collection.h:304
~Collection() override
Destructor.
Definition: collection.h:281
System::Details::VirtualizedIteratorBase< T > * virtualizeBeginConstIterator() const override
Gets the implementation of begin const iterator for the current container.
Definition: collection.h:269
SharedPtr< Generic::IList< T > > get_Items()
Internal data structure accessor.
Definition: collection.h:36
System::Details::VirtualizedIteratorBase< T > * virtualizeEndIterator() override
Gets the implementation of end iterator for the current container.
Definition: collection.h:264
virtual void ClearItems()
Deletes all items.
Definition: collection.h:284
System::Details::VirtualizedIteratorBase< T > * virtualizeBeginIterator() override
Gets the implementation of begin iterator for the current container.
Definition: collection.h:259
void Clear() override
Deletes all elements.
Definition: collection.h:108
Collection()
Creates empty collection.
Definition: collection.h:24
const T & operator[](int index) const
Gets value at specified index.
Definition: collection.h:91
reverse_iterator rbegin() noexcept
Gets a reverse iterator to the last element of collection (first in reverse).
Definition: collection.h:239
SharedPtr< Generic::IEnumerator< T > > GetEnumerator() override
Gets enumerator to iterate through collection.
Definition: collection.h:121
int get_Count() const override
Gets number of elements.
Definition: collection.h:49
virtual void Add(const T &item) override
Adds value to container.
Definition: collection.h:102
Collection(SharedPtr< Generic::IList< T > > list)
Definition: collection.h:27
void Insert(int index, const T &item) override
Inserts item into specified position.
Definition: collection.h:135
const_reverse_iterator crbegin() const noexcept
Gets a reverse iterator to the last const-qualified element of collection (first in reverse).
Definition: collection.h:253
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
std::enable_if<!IsSmartPtr< T >::value, SmartPtr< T > >::type MakeObject(Args &&... args)
Creates object on heap and returns shared pointer to it.
Definition: smart_ptr.h:1506