intrusive_node.hpp 950 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. //
  2. // intrusive_node.hpp
  3. // intrusive_list
  4. //
  5. // Created by Sam Jaffe on 1/7/17.
  6. //
  7. #pragma once
  8. template <typename T> class intrusive_list;
  9. template <typename T>
  10. class intrusive_node {
  11. public:
  12. typedef T value_type;
  13. typedef T& reference;
  14. typedef const T& const_reference;
  15. typedef T* pointer;
  16. typedef const T* const_pointer;
  17. private:
  18. typedef intrusive_node<T>* self;
  19. public:
  20. intrusive_node() = delete;
  21. intrusive_node(const intrusive_node&) = delete;
  22. intrusive_node(intrusive_node&&) = delete;
  23. intrusive_node& operator=(const intrusive_node&) = delete;
  24. intrusive_node& operator=(intrusive_node&&) = delete;
  25. intrusive_node(pointer ptr);
  26. ~intrusive_node();
  27. private:
  28. friend intrusive_list<T>;
  29. friend intrusive_iterator<intrusive_node<T> >;
  30. friend const_intrusive_iterator<intrusive_node<T> >;
  31. pointer ptr_ = nullptr;
  32. intrusive_list<T>* list_ = nullptr;
  33. self next_ = nullptr;
  34. self prev_ = nullptr;
  35. };