8#include "Arp/Base/Core/Exception.hpp"
9#include "Arp/Base/Core/Detail/Enumerator.hxx"
11namespace Arp {
namespace Base {
namespace Core
19template<
typename U,
typename O>
24 using TransformOperation = O;
27 Transform(SourcePtr sourcePtr, O transformOp);
28 Transform(
const Transform& arg) =
delete;
40 TransformOperation transformOp;
49template<
class U,
class O>
56template<
class U,
class O>
61template<
class U,
class O>
68template<
class U,
class O>
70 : sourcePtr(
std::move(sourcePtr)), transformOp(
std::move(transformOp))
76template<
class U,
class O>
79 return this->sourcePtr->MoveNext();
84template<
class U,
class O>
87 return this->transformOp(this->sourcePtr->GetCurrent());
99template<
class S,
class O>
102 using U =
typename S::ValueType;
103 return std::make_shared<Enumerator<T>::Transform<U, O>>(std::move(sourcePtr), std::move(transformOperation));
This class defines a base class for all enumerator implementations and some predefined enumerators as...
Definition: Enumerator.hxx:24
T GetCurrent(void) override
Gets the element at the current position.
Definition: Enumerator.hxx:113
Declares the interface of the enumerator pattern, which is leaned on .NET enumerator idiom.
Definition: IEnumerator.hxx:49
virtual bool MoveNext(void)=0
Moves this enumerator to the next position.
std::shared_ptr< IEnumerator > Ptr
The smart pointer type of this interface.
Definition: IEnumerator.hxx:52
Root namespace for the PLCnext API
Namespace of the C++ standard library