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
207 SharedPtr<IEnumerable<T>> LINQ_Take(int32_t count);
208
213 template <typename ResultType>
214 ResultType LINQ_Min(const Func<T, ResultType>& selector);
215
220 template <typename ResultType>
221 ResultType LINQ_Max(const Func<T, ResultType>& selector);
222
224 using iterator = System::Details::VirtualizedIterator<T>;
226 using const_iterator = System::Details::VirtualizedConstIterator<T>;
227
233 {
234 return iterator(virtualizeBeginIterator());
235 }
241 {
242 return iterator(virtualizeEndIterator());
243 }
244
248 {
249 return const_iterator(virtualizeBeginConstIterator());
250 }
255 {
256 return const_iterator(virtualizeEndConstIterator());
257 }
258
262 {
263 return const_iterator(virtualizeBeginConstIterator());
264 }
268 {
269 return const_iterator(virtualizeEndConstIterator());
270 }
271
273 using virtualized_iterator = System::Details::VirtualizedIteratorBase<T>;
276
280 {
281 return GetEnumeratorAsVirtualizedIterator();
282 }
286 {
287 return new System::Details::EnumeratorBasedEndIterator<T>();
288 }
292 {
293 return GetEnumeratorAsVirtualizedIterator();
294 }
298 {
299 return new System::Details::EnumeratorBasedEndIterator<T>();
300 }
301
302protected:
304 ~IEnumerable() override {}
305
309 {
311 {
312 auto enumerator = GetEnumerator();
313 if (enumerator->SharedCount() != 1)
314 {
315 enumerator->InitializeIterator();
316 return new EnumeratorWrapperIterator<T>(enumerator);
317 }
318 iterator = enumerator->AsVirtualizedIterator();
319 }
320 iterator->MarkOwnedByVirtualizedIterator();
321 return iterator;
322 }
326 {
327 return const_cast<IEnumerable<T>*>(this)->GetEnumeratorAsVirtualizedIterator();
328 }
329};
330
331}}} // 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:240
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:325
T virtualized_iterator_element
Inner iterator element type.
Definition: ienumerable.h:275
virtual virtualized_iterator * virtualizeBeginConstIterator() const
Gets the implementation of begin const iterator for the current container.
Definition: ienumerable.h:291
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:226
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:273
const_iterator cend() const
Gets iterator pointing right after the last const-qualified element (if any) of the collection.
Definition: ienumerable.h:267
const_iterator begin() const
Gets iterator pointing to the first element (if any) of the const-qualified instance of the collectio...
Definition: ienumerable.h:247
virtual virtualized_iterator * virtualizeBeginIterator()
Gets the implementation of begin iterator for the current container.
Definition: ienumerable.h:279
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:254
SharedPtr< IEnumerable< ResultType > > LINQ_OfType()
Filters the elements of the sequence based on the specified type.
~IEnumerable() override
Destructor.
Definition: ienumerable.h:304
System::Details::VirtualizedIterator< T > iterator
Iterator type.
Definition: ienumerable.h:224
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:285
iterator begin()
Gets iterator pointing to the first element (if any) of the collection. This iterator can't be used t...
Definition: ienumerable.h:232
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:297
const_iterator cbegin() const
Gets iterator pointing to the first const-qualified element (if any) of the collection.
Definition: ienumerable.h:261
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:308
System::SharedPtr< IEnumerable< System::SharedPtr< System::Linq::IGrouping< Key, T > > > > LINQ_GroupBy(System::Func< T, Key > keyPredicate)
Groups the elements of a sequence.
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:62
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