4#ifndef _Stroika_Foundation_Traversal_BidirectionalIterator_h_
5#define _Stroika_Foundation_Traversal_BidirectionalIterator_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
11#include "Stroika/Foundation/Common/Common.h"
24namespace Stroika::Foundation::Traversal {
28 template <
typename T,
typename BASE_STD_ITERATOR = DefaultIteratorTraits<b
idirectional_iterator_tag, T>>
29 class BidirectionalIterator :
public Iterator<T, BASE_STD_ITERATOR> {
31 using inherited = Iterator<T, BASE_STD_ITERATOR>;
37 using BidirectionalIteratorRepSharedPtr = unique_ptr<IRep>;
49 explicit BidirectionalIterator (
const BidirectionalIteratorRepSharedPtr& rep);
50 BidirectionalIterator (
const BidirectionalIterator& from);
51 BidirectionalIterator () =
delete;
57 enum ConstructionFlagForceAtEnd_ {
62 BidirectionalIterator (ConstructionFlagForceAtEnd_);
68 nonvirtual BidirectionalIterator& operator= (
const BidirectionalIterator& rhs) =
default;
81 static BidirectionalIterator GetEmptyIterator ();
86 template <
typename T,
typename BASE_STD_ITERATOR>
87 class BidirectionalIterator<T, BASE_STD_ITERATOR>::IRep :
public Iterator<T, BASE_STD_ITERATOR>::IRep {
100#include "BidirectionalIterator.inl"