ECSTASY
All in the name
Loading...
Searching...
No Matches
util::serialization::PolymorphicIterator< T > Class Template Reference

Polymorphism iterator for value T. More...

#include <PolymorphicIterator.hpp>

Collaboration diagram for util::serialization::PolymorphicIterator< T >:

Classes

struct  Concept
 
class  Model
 

Public Types

using value_type = T
 
using reference = value_type &
 
using pointer = value_type *
 
using difference_type = std::ptrdiff_t
 
using iterator_category = std::random_access_iterator_tag
 

Public Member Functions

template<class Iter >
 PolymorphicIterator (Iter iter)
 Construct a new Polymorphic Iterator.
 
 PolymorphicIterator (const PolymorphicIterator &r)
 Construct a copy of an existing Polymorphic Iterator.
 
value_type operator* () const
 Fetch the iterator value.
 
PolymorphicIteratoroperator++ ()
 Increment the internal iteraor inplace.
 
PolymorphicIterator operator++ (int)
 Copy this and increment it.
 
bool operator== (const PolymorphicIterator &r) const noexcept
 Equality operator.
 
bool operator!= (const PolymorphicIterator &r) const noexcept
 Inequality operator.
 

Private Attributes

std::unique_ptr< Concept_impl
 

Detailed Description

template<typename T>
class util::serialization::PolymorphicIterator< T >

Polymorphism iterator for value T.

Template Parameters
TValue type of the iterator.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-13)

Definition at line 28 of file PolymorphicIterator.hpp.

Member Typedef Documentation

◆ difference_type

template<typename T >
using util::serialization::PolymorphicIterator< T >::difference_type = std::ptrdiff_t

Definition at line 33 of file PolymorphicIterator.hpp.

◆ iterator_category

template<typename T >
using util::serialization::PolymorphicIterator< T >::iterator_category = std::random_access_iterator_tag

Definition at line 34 of file PolymorphicIterator.hpp.

◆ pointer

template<typename T >
using util::serialization::PolymorphicIterator< T >::pointer = value_type *

Definition at line 32 of file PolymorphicIterator.hpp.

◆ reference

template<typename T >
using util::serialization::PolymorphicIterator< T >::reference = value_type &

Definition at line 31 of file PolymorphicIterator.hpp.

◆ value_type

template<typename T >
using util::serialization::PolymorphicIterator< T >::value_type = T

Definition at line 30 of file PolymorphicIterator.hpp.

Constructor & Destructor Documentation

◆ PolymorphicIterator() [1/2]

template<typename T >
template<class Iter >
util::serialization::PolymorphicIterator< T >::PolymorphicIterator ( Iter  iter)
inline

Construct a new Polymorphic Iterator.

Template Parameters
IterInternal iterator type.
Parameters
[in]iterIterator type.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-13)

Definition at line 186 of file PolymorphicIterator.hpp.

186 : _impl(std::make_unique<Model<Iter>>(iter))
187 {
188 }
T make_unique(T... args)

◆ PolymorphicIterator() [2/2]

template<typename T >
util::serialization::PolymorphicIterator< T >::PolymorphicIterator ( const PolymorphicIterator< T > &  r)
inline

Construct a copy of an existing Polymorphic Iterator.

Parameters
[in]rIterator to copy.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-13)

Definition at line 198 of file PolymorphicIterator.hpp.

198 : _impl(r._impl->clone())
199 {
200 }

Member Function Documentation

◆ operator!=()

template<typename T >
bool util::serialization::PolymorphicIterator< T >::operator!= ( const PolymorphicIterator< T > &  r) const
inlinenoexcept

Inequality operator.

Parameters
[in]rOther iterator.
Returns
bool Whether the two iterators are not equal.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-13)

Definition at line 271 of file PolymorphicIterator.hpp.

272 {
273 return !(*this == r);
274 }

◆ operator*()

template<typename T >
value_type util::serialization::PolymorphicIterator< T >::operator* ( ) const
inline

Fetch the iterator value.

Returns
const value_type Iterator value.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-13)

Definition at line 210 of file PolymorphicIterator.hpp.

211 {
212 return _impl->get();
213 }

◆ operator++() [1/2]

template<typename T >
PolymorphicIterator & util::serialization::PolymorphicIterator< T >::operator++ ( )
inline

Increment the internal iteraor inplace.

Returns
PolymorphicIterator& this.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-13)

Definition at line 223 of file PolymorphicIterator.hpp.

224 {
225 _impl->nextInplace();
226 return *this;
227 }

◆ operator++() [2/2]

template<typename T >
PolymorphicIterator util::serialization::PolymorphicIterator< T >::operator++ ( int  )
inline

Copy this and increment it.

Warning
You should use the inplace increment instead.
Returns
PolymorphicIterator Incremented copy of this.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-13)

Definition at line 239 of file PolymorphicIterator.hpp.

240 {
241 PolymorphicIterator res = *this;
242
243 return ++res;
244 }
PolymorphicIterator(Iter iter)
Construct a new Polymorphic Iterator.

◆ operator==()

template<typename T >
bool util::serialization::PolymorphicIterator< T >::operator== ( const PolymorphicIterator< T > &  r) const
inlinenoexcept

Equality operator.

Parameters
[in]rOther iterator.
Returns
bool Whether the two iterators are equal.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-13)

Definition at line 256 of file PolymorphicIterator.hpp.

257 {
258 return _impl->type() == r._impl->type() && _impl->equal(r._impl->address());
259 }

Member Data Documentation

◆ _impl

template<typename T >
std::unique_ptr<Concept> util::serialization::PolymorphicIterator< T >::_impl
private

Definition at line 278 of file PolymorphicIterator.hpp.


The documentation for this class was generated from the following file: