intrusive_linked_list.h 966 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. namespace NYT {
  3. ////////////////////////////////////////////////////////////////////////////////
  4. template <class TItem>
  5. struct TIntrusiveLinkedListNode
  6. {
  7. TItem* Next = nullptr;
  8. TItem* Prev = nullptr;
  9. };
  10. template <class TItem, class TItemToNode>
  11. class TIntrusiveLinkedList
  12. {
  13. public:
  14. explicit TIntrusiveLinkedList(TItemToNode itemToNode = TItemToNode());
  15. TItem* GetFront() const;
  16. TItem* GetBack() const;
  17. int GetSize() const;
  18. void PushFront(TItem* item);
  19. void PopFront();
  20. void PushBack(TItem* item);
  21. void PopBack();
  22. void Remove(TItem* item);
  23. void Clear();
  24. private:
  25. const TItemToNode ItemToNode_;
  26. TItem* Front_ = nullptr;
  27. TItem* Back_ = nullptr;
  28. int Size_ = 0;
  29. };
  30. ////////////////////////////////////////////////////////////////////////////////
  31. } // namespace NYT
  32. #define INTRUSIVE_LINKED_LIST_INL_H_
  33. #include "intrusive_linked_list-inl.h"
  34. #undef INTRUSIVE_LINKED_LIST_INL_H_