diff options
Diffstat (limited to 'include/intrusive_list.h')
-rw-r--r-- | include/intrusive_list.h | 111 |
1 files changed, 1 insertions, 110 deletions
diff --git a/include/intrusive_list.h b/include/intrusive_list.h index 134a72267..ae323edb8 100644 --- a/include/intrusive_list.h +++ b/include/intrusive_list.h @@ -50,113 +50,4 @@ class intrusive_list_node friend class intrusive_list<T, Tag>; }; -template <typename T, typename Tag> -class intrusive_list -{ - public: - class iterator : public std::iterator<std::bidirectional_iterator_tag, T*> - { - T* curr; - - public: - iterator(T* i = NULL) - : curr(i) - { - } - - iterator& operator++() - { - curr = curr->intrusive_list_node<T, Tag>::ptr_next; - return *this; - } - - iterator operator++(int) - { - iterator ret(*this); - operator++(); - return ret; - } - - iterator& operator--() - { - curr = curr->intrusive_list_node<T, Tag>::ptr_prev; - return *this; - } - - iterator operator--(int) - { - iterator ret(*this); - operator--(); - return ret; - } - - bool operator==(const iterator& other) const { return (curr == other.curr); } - bool operator!=(const iterator& other) const { return (curr != other.curr); } - T* operator*() const { return curr; } - }; - - typedef iterator const_iterator; - - intrusive_list() - : listhead(NULL) - , listsize(0) - { - } - - bool empty() const - { - return (size() == 0); - } - - size_t size() const - { - return listsize; - } - - iterator begin() const - { - return iterator(listhead); - } - - iterator end() const - { - return iterator(); - } - - void pop_front() - { - erase(listhead); - } - - T* front() const - { - return listhead; - } - - void push_front(T* x) - { - if (listsize++) - { - x->intrusive_list_node<T, Tag>::ptr_next = listhead; - listhead->intrusive_list_node<T, Tag>::ptr_prev = x; - } - listhead = x; - } - - void erase(const iterator& it) - { - erase(*it); - } - - void erase(T* x) - { - if (listhead == x) - listhead = x->intrusive_list_node<T, Tag>::ptr_next; - x->intrusive_list_node<T, Tag>::unlink(); - listsize--; - } - - private: - T* listhead; - size_t listsize; -}; +#include "intrusive_list_impl.h" |