6namespace Stroika::Foundation::Traversal {
13 template <
typename T,
typename EXTRA_DATA>
14 DelegatedIterator<T, EXTRA_DATA>::Rep::Rep (
const Iterator<T>& delegateTo,
const EXTRA_DATA& extraData)
15 : fDelegateTo{delegateTo}
16 , fExtraData{extraData}
19 template <
typename T,
typename EXTRA_DATA>
20 auto DelegatedIterator<T, EXTRA_DATA>::Rep::Clone () const -> unique_ptr<IRep>
22 return make_unique<Rep> (*
this);
24 template <
typename T,
typename EXTRA_DATA>
25 bool DelegatedIterator<T, EXTRA_DATA>::Rep::AtEnd ()
const
28 return fDelegateTo.AtEnd ();
30 template <
typename T,
typename EXTRA_DATA>
31 optional<T> DelegatedIterator<T, EXTRA_DATA>::Rep::Current ()
const
34 if (fDelegateTo.AtEnd ()) {
39 template <
typename T,
typename EXTRA_DATA>
40 optional<T> DelegatedIterator<T, EXTRA_DATA>::Rep::More ()
44 if (fDelegateTo.AtEnd ()) {
49 template <
typename T,
typename EXTRA_DATA>
50 bool DelegatedIterator<T, EXTRA_DATA>::Rep::Equals (
const IRep* rhs)
const
52 return fDelegateTo.ConstGetRep ().Equals (rhs);
60 template <
typename T,
typename EXTRA_DATA>
61 DelegatedIterator<T, EXTRA_DATA>::DelegatedIterator (
const Iterator<T>& delegateTo,
const EXTRA_DATA& extraData)
62 : Iterator<T>{make_unique<Rep> (delegateTo, extraData)}