CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
ienumerable.h
1
2#pragma once
3
4#include <iterator>
5#include <memory>
6
7#include <system/collections/ienumerator.h>
8#include <system/collections/virtualized_iterator.h>
9#include <system/func.h>
10#include <system/linq/igrouping.h>
11
12namespace System { namespace Linq {
13template <typename T> class IOrderedEnumerable;
14}}
15
16namespace System { namespace Collections { namespace Generic {
17
18template<typename T> class ASPOSECPP_SHARED_CLASS List;
19template<typename T> class EnumerableExt;
20
23template<typename T>
24class ASPOSECPP_SHARED_CLASS IEnumerable: virtual public Object
25{
27 RTTI_INFO_TEMPLATE_CLASS(System::Collections::Generic::IEnumerable<T>, System::BaseTypesInfo<System::Object>);
28
29public:
32
33 using ValueType = T;
34
35 // There no need to define an empty virtual dtor, virtual dtor for inheritance already defined in the Object class
39
40 // Implementation of some of LINQ extension methods as usual class methods
41 // header <system/linq/enumerable.h> should be included in order to use
42
46 T LINQ_Aggregate(const Func<T, T, T>& func);
47
51 T LINQ_ElementAt(int index);
52
56 T LINQ_ElementAtOrDefault(int index);
57
61 T LINQ_First();
62
67 T LINQ_First(const Func<T, bool>& predicate);
68
71 T LINQ_FirstOrDefault();
72
78 T LINQ_FirstOrDefault(std::function<bool(T)> predicate);
79
83 T LINQ_Last();
84
87 T LINQ_LastOrDefault();
88
91 SharedPtr<List<T>> LINQ_ToList();
92
95 int LINQ_Count();
96
100 int LINQ_Count(const Func<T, bool>& predicate);
101
104 System::ArrayPtr<T> LINQ_ToArray();
105
110 bool LINQ_All(std::function<bool(T)> predicate);
111
114 bool LINQ_Any();
115
119 bool LINQ_Any(std::function<bool(T)> predicate);
120
124 SharedPtr<IEnumerable<T>> LINQ_Where(std::function<bool(T)> predicate);
125
129 bool LINQ_Contains(T value);
130
135 template <typename ResultType>
137
141 template <typename Key>
143
147 template <typename Key>
149
153 template <typename ResultType>
155
160 template <typename ResultType>
162
167 template <typename ResultType>
169
173 SharedPtr<IEnumerable<T>> LINQ_Concat(SharedPtr<IEnumerable<T>> sequence);
174
177 SharedPtr<IEnumerable<T>> LINQ_Reverse();
178
183 template <typename Key>
186
193 template <typename Key, typename Element>
196
201 template <typename ResultType>
203
208 SharedPtr<IEnumerable<T>> LINQ_Skip(int32_t count);
209
213 SharedPtr<IEnumerable<T>> LINQ_Take(int32_t count);
214
219 template <typename ResultType>
220 ResultType LINQ_Min(const Func<T, ResultType>& selector);
221
226 template <typename ResultType>
227 ResultType LINQ_Max(const Func<T, ResultType>& selector);
228
229
233 T LINQ_Average();
234
241 template <typename ResultType>
242 ResultType LINQ_Average(const Func<T, ResultType>& selector);
243
245 using iterator = System::Details::VirtualizedIterator<T>;
247 using const_iterator = System::Details::VirtualizedConstIterator<T>;
248
254 {
255 return iterator(virtualizeBeginIterator());
256 }
262 {
263 return iterator(virtualizeEndIterator());
264 }
265
269 {
270 return const_iterator(virtualizeBeginConstIterator());
271 }
276 {
277 return const_iterator(virtualizeEndConstIterator());
278 }
279
283 {
284 return const_iterator(virtualizeBeginConstIterator());
285 }
289 {
290 return const_iterator(virtualizeEndConstIterator());
291 }
292
294 using virtualized_iterator = System::Details::VirtualizedIteratorBase<T>;
297
301 {
302 return GetEnumeratorAsVirtualizedIterator();
303 }
307 {
308 return new System::Details::EnumeratorBasedEndIterator<T>();
309 }
313 {
314 return GetEnumeratorAsVirtualizedIterator();
315 }
319 {
320 return new System::Details::EnumeratorBasedEndIterator<T>();
321 }
322
323protected:
325 ~IEnumerable() override {}
326
330 {
332 {
333 auto enumerator = GetEnumerator();
334 if (enumerator->SharedCount() != 1)
335 {
336 enumerator->InitializeIterator();
337 return new EnumeratorWrapperIterator<T>(enumerator);
338 }
339 iterator = enumerator->AsVirtualizedIterator();
340 }
341 iterator->MarkOwnedByVirtualizedIterator();
342 return iterator;
343 }
347 {
348 return const_cast<IEnumerable<T>*>(this)->GetEnumeratorAsVirtualizedIterator();
349 }
350};
351
352}}} // namespace System::Collections::Generic
Iterator that wraps the pre-created enumerator and redirects all calls into it.
Definition: ienumerator.h:164
Interface of object providing enumerator on contained elements.
Definition: ienumerable.h:25
iterator end()
Gets iterator pointing right after the last element (if any) of the collection. This iterator can't b...
Definition: ienumerable.h:261
SharedPtr< IEnumerable< ResultType > > LINQ_Select(const Func< T, ResultType > &selector)
Transforms elements of a sequence.
System::SharedPtr< IEnumerable< System::SharedPtr< System::Linq::IGrouping< Key, Element > > > > LINQ_GroupBy(System::Func< T, Key > keyPredicate, System::Func< T, Element > elementSelector)
Groups the elements of a sequence.
virtualized_iterator * GetEnumeratorAsVirtualizedIterator() const
Gets enumerator instance and prepares it to be used as iterator kernel.
Definition: ienumerable.h:346
T virtualized_iterator_element
Inner iterator element type.
Definition: ienumerable.h:296
virtual virtualized_iterator * virtualizeBeginConstIterator() const
Gets the implementation of begin const iterator for the current container.
Definition: ienumerable.h:312
ResultType LINQ_Min(const Func< T, ResultType > &selector)
Invokes a transform function on each element of a generic sequence and returns the minimum resulting ...
System::Details::VirtualizedConstIterator< T > const_iterator
Const iterator type.
Definition: ienumerable.h:247
SharedPtr< IEnumerable< ResultType > > LINQ_Select(const Func< T, int32_t, ResultType > &selector)
Transforms each element of a sequence into a new form by incorporating the element's index.
IEnumerator< T > IEnumeratorType
Enumerator type.
Definition: ienumerable.h:31
System::Details::VirtualizedIteratorBase< T > virtualized_iterator
Inner iterator base type.
Definition: ienumerable.h:294
const_iterator cend() const
Gets iterator pointing right after the last const-qualified element (if any) of the collection.
Definition: ienumerable.h:288
const_iterator begin() const
Gets iterator pointing to the first element (if any) of the const-qualified instance of the collectio...
Definition: ienumerable.h:268
virtual virtualized_iterator * virtualizeBeginIterator()
Gets the implementation of begin iterator for the current container.
Definition: ienumerable.h:300
const_iterator end() const
Gets iterator pointing right after the last element (if any) of the const-qualified instance of the c...
Definition: ienumerable.h:275
SharedPtr< IEnumerable< ResultType > > LINQ_OfType()
Filters the elements of the sequence based on the specified type.
~IEnumerable() override
Destructor.
Definition: ienumerable.h:325
System::Details::VirtualizedIterator< T > iterator
Iterator type.
Definition: ienumerable.h:245
SharedPtr< Linq::IOrderedEnumerable< T > > LINQ_OrderBy(const Func< T, Key > &keySelector)
Sorts the elements of a sequence in ascending order according to the key values selected by keySelect...
SharedPtr< IEnumerable< ResultType > > LINQ_Cast()
Casts the elements to the specified type.
virtual virtualized_iterator * virtualizeEndIterator()
Gets the implementation of end iterator for the current container.
Definition: ienumerable.h:306
iterator begin()
Gets iterator pointing to the first element (if any) of the collection. This iterator can't be used t...
Definition: ienumerable.h:253
SharedPtr< IEnumerable< ResultType > > LINQ_SelectMany(const Func< T, SharedPtr< IEnumerable< ResultType > > > &selector)
Projects each element of a sequence and combines the resulting sequences into one sequence.
ResultType LINQ_Max(const Func< T, ResultType > &selector)
Invokes a transform function on each element of a generic sequence and returns the maximum resulting ...
virtual virtualized_iterator * virtualizeEndConstIterator() const
Gets the implementation of end const iterator for the current container.
Definition: ienumerable.h:318
const_iterator cbegin() const
Gets iterator pointing to the first const-qualified element (if any) of the collection.
Definition: ienumerable.h:282
virtual SharedPtr< IEnumerator< T > > GetEnumerator()=0
Gets enumerator.
SharedPtr< Linq::IOrderedEnumerable< T > > LINQ_OrderByDescending(const Func< T, Key > &keySelector)
Sorts the elements of a sequence in descending order according to the key values selected by keySelec...
virtualized_iterator * GetEnumeratorAsVirtualizedIterator()
Gets enumerator instance and prepares it to be used as iterator kernel.
Definition: ienumerable.h:329
System::SharedPtr< IEnumerable< System::SharedPtr< System::Linq::IGrouping< Key, T > > > > LINQ_GroupBy(System::Func< T, Key > keyPredicate)
Groups the elements of a sequence.
ResultType LINQ_Average(const Func< T, ResultType > &selector)
Computes the average of a sequence of values that are obtained by invoking a transform function on ea...
T ValueType
Definition: ienumerable.h:33
Interface of enumerator which can be used to iterate through some elements. Objects of this class sho...
Definition: ienumerator.h:63
List forward declaration.
Definition: list.h:127
Function delegate. This type should be allocated on stack and passed to functions by value or by refe...
Definition: func.h:82
Represents a sorted sequence.
Definition: iordered_enumerable.h:15
Base class that enables using methods available for System.Object class in C#. All non-trivial classe...
Definition: object.h:51
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