From f4c6e7db4b8de275f6569067d2e843f5d4f000d0 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Tue, 22 Nov 2022 08:24:36 +0100 Subject: [PATCH] reverse compil --- containers/iterators/iterator_traits.hpp | 12 ++-- .../iterators/random_access_iterator.hpp | 28 ++++++--- containers/iterators/reverse_iterator.hpp | 63 ++++++++++++++----- containers/vector.hpp | 4 +- 4 files changed, 76 insertions(+), 31 deletions(-) diff --git a/containers/iterators/iterator_traits.hpp b/containers/iterators/iterator_traits.hpp index 2f9a1b5..9ef95a2 100644 --- a/containers/iterators/iterator_traits.hpp +++ b/containers/iterators/iterator_traits.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/11/19 05:07:29 by apommier #+# #+# */ -/* Updated: 2022/11/19 05:09:05 by apommier ### ########.fr */ +/* Updated: 2022/11/22 06:28:50 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,10 +18,10 @@ namespace ft struct iterator_traits { typedef typename Iterator::iterator_category iterator_category; - typedef typename Iterator::value_type value_type; - typedef typename Iterator::difference_type difference_type; - typedef difference_type distance_type; - typedef typename Iterator::pointer pointer; - typedef typename Iterator::reference reference; + typedef typename Iterator::value_type value_type; + typedef typename Iterator::difference_type difference_type; + typedef difference_type distance_type; + typedef typename Iterator::pointer pointer; + typedef typename Iterator::reference reference; }; } \ No newline at end of file diff --git a/containers/iterators/random_access_iterator.hpp b/containers/iterators/random_access_iterator.hpp index 5e224dc..4e6e42a 100644 --- a/containers/iterators/random_access_iterator.hpp +++ b/containers/iterators/random_access_iterator.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/30 16:14:35 by apommier #+# #+# */ -/* Updated: 2022/11/21 15:54:44 by apommier ### ########.fr */ +/* Updated: 2022/11/22 08:10:53 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -40,20 +40,32 @@ namespace ft random_access_iterator(){ _ptr = NULL;} random_access_iterator(pointer ptr){ _ptr = ptr;} - random_access_iterator(random_access_iterator const &cpy) {*this = cpy;} + random_access_iterator(const random_access_iterator &cpy) {*this = cpy;} ~random_access_iterator(){} - random_access_iterator &operator=(random_access_iterator const &cpy) + // random_access_iterator &operator=(const random_access_iterator &cpy) + // { + // _ptr = cpy._ptr; + // return (*this); + // } + + + operator random_access_iterator() const { - _ptr = cpy._ptr; + return (random_access_iterator(_ptr)); + } + + random_access_iterator &operator=(random_access_iterator const &rhs) + { + if (this != &rhs) + { + this->_ptr = rhs._ptr; + } return (*this); } - operator random_access_iterator() const - { - return (random_access_iterator(_ptr)); - } + // random_access_iterator &operator=(pointer &ptr) // { // _ptr = ptr; diff --git a/containers/iterators/reverse_iterator.hpp b/containers/iterators/reverse_iterator.hpp index e264f10..1888edb 100644 --- a/containers/iterators/reverse_iterator.hpp +++ b/containers/iterators/reverse_iterator.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/11/19 05:14:31 by apommier #+# #+# */ -/* Updated: 2022/11/22 06:15:05 by apommier ### ########.fr */ +/* Updated: 2022/11/22 08:23:53 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -42,30 +42,43 @@ namespace ft reverse_iterator() : _Ite() {} explicit reverse_iterator (iterator_type it) { _Ite = iterator_type(it); } + //reverse_iterator(const reverse_iterator &rev_it) : _Ite(rev_it.base()) {} + 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); + *this = rev_it; } virtual ~reverse_iterator(){} + // reverse_iterator(const reverse_iterator &rev_it) + // { + // _Ite = It(rev_it.base()); + // } + // operator reverse_iterator() const + // { + // return (reverse_iterator< Iter const>(_Ite)); + // } + template + reverse_iterator operator=(reverse_iterator const &cpy) + { + _Ite = cpy.base(); + return (*this); + } + + + //--------------------------------------- //-------------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); } + // bool operator== (reverse_iterator const &rhs) const { return (_Ite == rhs.base()); } + // bool operator!= (reverse_iterator const &rhs) const { return (_Ite != rhs.base()); } + // bool operator< (reverse_iterator const &rhs) const { return (_Ite > rhs.base()); } + // bool operator<= (reverse_iterator const &rhs) const { return (_Ite >= rhs.base()); } + // bool operator> (reverse_iterator const &rhs) const { return (_Ite < rhs.base()); } + // bool operator>= (reverse_iterator const &rhs) const { return (_Ite <= rhs.base()); } //--------------------------------------- //-------------INCREMENTERS-------------- @@ -154,6 +167,26 @@ namespace ft //--------------GET---------------- //--------------------------------- - iterator_type base() const { return iterator_category(_Ite); } + iterator_type base() const { return _Ite; } }; + + template + bool operator== (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() == rhs.base()); } + + template + bool operator!= (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() != rhs.base()); } + + template + bool operator< (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() > rhs.base()); } + + template + bool operator<= (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() >= rhs.base()); } + + template + bool operator> (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() < rhs.base()); } + + template + bool operator>= (const reverse_iterator &lhs, const reverse_iterator &rhs) { return (lhs.base() <= rhs.base()); } + + } \ No newline at end of file diff --git a/containers/vector.hpp b/containers/vector.hpp index e0a6ed7..7c439e6 100644 --- a/containers/vector.hpp +++ b/containers/vector.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/12 19:46:32 by apommier #+# #+# */ -/* Updated: 2022/11/21 18:48:56 by apommier ### ########.fr */ +/* Updated: 2022/11/22 07:46:32 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -40,7 +40,7 @@ class vector typedef T* pointer; typedef const T* const_pointer; typedef ft::random_access_iterator iterator; - typedef ft::random_access_iterator const_iterator; + typedef ft::random_access_iterator< value_type const> const_iterator; typedef ft::reverse_iterator reverse_iterator; typedef ft::reverse_iterator const_reverse_iterator; typedef std::ptrdiff_t difference_type;