Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.4 KiB

  1. #ifndef _OBLIST_H_
  2. #define _OBLIST_H_
  3. // class COBNODE;
  4. #define POSITION COBNODE*
  5. struct COBNODE
  6. {
  7. POSITION pNext;
  8. void* pItem;
  9. };
  10. class COBLIST
  11. {
  12. protected:
  13. POSITION m_pHead;
  14. POSITION m_pTail;
  15. virtual BOOL Compare(void* pItemToCompare, void* pComparator)
  16. {return(pItemToCompare == pComparator);};
  17. public:
  18. COBLIST() : m_pHead(NULL), m_pTail(NULL) { };
  19. POSITION GetHeadPosition() { return(m_pHead); };
  20. POSITION GetTailPosition() { return(m_pTail); };
  21. virtual void * RemoveAt(POSITION rPos);
  22. virtual void * ReplaceAt(POSITION rPos, void* pNewItem)
  23. {
  24. void *pvoid = rPos->pItem;
  25. rPos->pItem = pNewItem;
  26. return(pvoid);
  27. }
  28. POSITION AddTail(void* pItem);
  29. BOOL IsEmpty() { return(!m_pHead); };
  30. void * GetTail();
  31. void * GetNext(POSITION& rPos);
  32. void * SafeGetFromPosition(POSITION rPos);
  33. POSITION GetPosition(void* pItem);
  34. POSITION Lookup(void* pComparator);
  35. void EmptyList();
  36. virtual ~COBLIST();
  37. #ifdef DEBUG
  38. void * GetHead();
  39. void * RemoveHead();
  40. // void * RemoveTail(); // inefficient
  41. void * GetFromPosition(POSITION rPos);
  42. #else
  43. void * GetHead(){return GetFromPosition(GetHeadPosition());};
  44. void * RemoveHead() { return RemoveAt(m_pHead); };
  45. // void * RemoveTail() { return RemoveAt(m_pTail); }; // inefficient
  46. void * GetFromPosition(POSITION rPos){return(rPos->pItem);};
  47. #endif
  48. };
  49. #endif // ndef _OBLIST_H_