/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* reverse_iterator.hpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/11/19 05:14:31 by apommier #+# #+# */ /* Updated: 2022/11/22 06:15:05 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #pragma once # include # include "./iterator_traits.hpp" namespace ft { template class reverse_iterator { public: typedef Iter iterator_type; typedef typename ft::iterator_traits::iterator_category iterator_category; typedef typename ft::iterator_traits::value_type value_type; typedef typename ft::iterator_traits::difference_type difference_type; typedef typename ft::iterator_traits::pointer pointer; typedef typename ft::iterator_traits::reference reference; private: iterator_type _Ite; public: //--------------------------------------- //--------CONSTRUCTOR DESTRUCTOR--------- //--------------------------------------- reverse_iterator() : _Ite() {} explicit reverse_iterator (iterator_type it) { _Ite = iterator_type(it); } template reverse_iterator(const reverse_iterator &rev_it) { _Ite = rev_it.base(); } reverse_iterator &operator=(reverse_iterator const &cpy) { _Ite = iterator_type(cpy._Ite); return (*this); } virtual ~reverse_iterator(){} //--------------------------------------- //-------------COMPARAISON--------------- //--------------------------------------- bool operator== (reverse_iterator const &rhs) const { return (_Ite == rhs._Ite); } bool operator!= (reverse_iterator const &rhs) const { return (_Ite != rhs._Ite); } bool operator< (reverse_iterator const &rhs) const { return (_Ite > rhs._Ite); } bool operator<= (reverse_iterator const &rhs) const { return (_Ite >= rhs._Ite); } bool operator> (reverse_iterator const &rhs) const { return (_Ite < rhs._Ite); } bool operator>= (reverse_iterator const &rhs) const { return (_Ite <= rhs._Ite); } //--------------------------------------- //-------------INCREMENTERS-------------- //--------------------------------------- reverse_iterator& operator++() { --_Ite; return (*this); } reverse_iterator operator++(int) { reverse_iterator tmp = *this; --_Ite; return (tmp); } reverse_iterator& operator--() { ++_Ite; return (*this); } reverse_iterator operator--(int) { reverse_iterator tmp = *this; ++_Ite; return (tmp); } //--------------------------------------- //----------------ADRESS----------------- //--------------------------------------- reference operator *() { return (*_Ite); } const reference operator *() const { return (*_Ite); } pointer operator ->() { return (_Ite.getPointer()); } const pointer operator ->() const { return (_Ite.getPointer()); } reference operator [](difference_type nbr) const { return (*(_Ite + nbr)); } //--------------------------------------- //--------------OPERATION---------------- //--------------------------------------- // reverse_iterator operator+ (difference_type n) const { return reverse_iterator(_Ite - n); } // reverse_iterator& operator+= (difference_type n) { return reverse_iterator(_Ite -= n); } // reverse_iterator operator- (difference_type n) const { return reverse_iterator(_Ite + n); } // reverse_iterator& operator-= (difference_type n) { return reverse_iterator(_Ite += n); } reverse_iterator operator+ (difference_type n) const { return reverse_iterator(_Ite - n); } friend reverse_iterator operator +(difference_type lhs, reverse_iterator const& rhs) { return (rhs + lhs); } // n + a reverse_iterator& operator+= (difference_type n) { _Ite -= n; return (*this); } reverse_iterator operator- (difference_type n) const { return reverse_iterator(_Ite + n); } difference_type operator- (reverse_iterator const &lhs) const { return (_Ite - lhs._Ite); } reverse_iterator& operator-= (difference_type n) { //std::cout << "its me\n"; _Ite += n; return (*this); } // template // reverse_iterator operator+ (typename reverse_iterator::difference_type n, const reverse_iterator& rev_it) // { // } // template // typename reverse_iterator::difference_type operator- ( const reverse_iterator& lhs, const reverse_iterator& rhs) // { // } //--------------------------------- //--------------GET---------------- //--------------------------------- iterator_type base() const { return iterator_category(_Ite); } }; }