| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- //
- // intrusive_iterator.hpp
- // intrusive_list
- //
- // Created by Sam Jaffe on 1/7/17.
- //
- #pragma once
- #include <iterator>
- template <typename T> class intrusive_list;
- template <typename N>
- class intrusive_iterator : public std::iterator<std::bidirectional_iterator_tag, typename N::value_type> {
- public:
- typedef std::bidirectional_iterator_tag iterator_category;
- typedef typename N::value_type value_type;
- typedef typename N::reference reference;
- typedef typename N::const_reference const_reference;
- typedef typename N::pointer pointer;
- typedef typename N::const_pointer const_pointer;
- public:
- intrusive_iterator(N* node);
-
- reference operator*();
- const_reference operator*() const;
-
- pointer operator->();
- const_pointer operator->() const;
-
- intrusive_iterator operator++(int);
- intrusive_iterator& operator++();
-
- intrusive_iterator operator--(int);
- intrusive_iterator& operator--();
-
- bool operator==(const intrusive_iterator& other) const;
- bool operator!=(const intrusive_iterator& other) const;
-
- private:
- friend intrusive_list<value_type>;
-
- N* get() const;
- N* node_;
- };
- template <typename N>
- class const_intrusive_iterator : public std::iterator<std::bidirectional_iterator_tag, typename N::value_type> {
- public:
- typedef std::bidirectional_iterator_tag iterator_category;
- typedef typename N::value_type value_type;
- typedef typename N::reference reference;
- typedef typename N::const_reference const_reference;
- typedef typename N::pointer pointer;
- typedef typename N::const_pointer const_pointer;
- public:
- const_intrusive_iterator(N* node);
-
- const_reference operator*() const;
-
- const_pointer operator->() const;
-
- const_intrusive_iterator operator++(int);
- const_intrusive_iterator& operator++();
-
- const_intrusive_iterator operator--(int);
- const_intrusive_iterator& operator--();
-
- bool operator==(const const_intrusive_iterator& other) const;
- bool operator!=(const const_intrusive_iterator& other) const;
-
- private:
- friend intrusive_list<value_type>;
-
- N* get() const;
- N* node_;
- };
|