| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- //
- // 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);
- operator const_intrusive_iterator<N>() const;
-
- 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_;
- };
|