intrusive_node.hpp 971 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. void unlink( );
  32. pointer ptr_ = nullptr;
  33. intrusive_list<T>* list_ = nullptr;
  34. self next_ = nullptr;
  35. self prev_ = nullptr;
  36. };