#ifndef ITERATOR_HPP #define ITERATOR_HPP /* ************************************************************************** */ namespace lasd { /* ************************************************************************** */ template class Iterator { private: // ... protected: // ... public: // Destructor // ~Iterator() specifiers /* ************************************************************************ */ // Copy assignment // type operator=(argument); // Copy assignment of abstract types should not be possible. // Move assignment // type operator=(argument); // Move assignment of abstract types should not be possible. /* ************************************************************************ */ // Comparison operators // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. /* ************************************************************************ */ // Specific member functions // type operator*() specifiers; // (concrete function must throw std::out_of_range when terminated) // type Terminated() specifiers; // (concrete function should not throw exceptions) }; /* ************************************************************************** */ template class ForwardIterator { // Must extend Iterator private: // ... protected: // ... public: // Destructor // ~ForwardIterator() specifiers /* ************************************************************************ */ // Copy assignment // type operator=(argument); // Copy assignment of abstract types should not be possible. // Move assignment // type operator=(argument); // Move assignment of abstract types should not be possible. /* ************************************************************************ */ // Comparison operators // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. /* ************************************************************************ */ // Specific member functions // type operator++() specifiers; // (concrete function must throw std::out_of_range when terminated) }; /* ************************************************************************** */ template class BackwardIterator { // Must extend Iterator private: // ... protected: // ... public: // Destructor // ~BackwardIterator() specifiers /* ************************************************************************ */ // Copy assignment // type operator=(argument); // Copy assignment of abstract types should not be possible. // Move assignment // type operator=(argument); // Move assignment of abstract types should not be possible. /* ************************************************************************ */ // Comparison operators // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. /* ************************************************************************ */ // Specific member functions // type operator--() specifiers; // (concrete function must throw std::out_of_range when terminated) }; /* ************************************************************************** */ template class BidirectionalIterator { // Must extend ForwardIterator and BackwardIterator private: // ... protected: // ... public: // Destructor // ~BidirectionalIterator() specifiers /* ************************************************************************ */ // Copy assignment // type operator=(argument); // Copy assignment of abstract types should not be possible. // Move assignment // type operator=(argument); // Move assignment of abstract types should not be possible. /* ************************************************************************ */ // Comparison operators // type operator==(argument) specifiers; // Comparison of abstract types might not be possible. // type operator!=(argument) specifiers; // Comparison of abstract types might not be possible. /* ************************************************************************ */ // Specific member functions // type Terminated() specifiers; // Override Iterator member // type ForwardTerminated() specifiers; // (concrete function should not throw exceptions) // type BackwardTerminated() specifiers; // (concrete function should not throw exceptions) }; /* ************************************************************************** */ } #endif