home *** CD-ROM | disk | FTP | other *** search
/ ftptest.leeds.ac.uk / 2015.02.ftptest.leeds.ac.uk.tar / ftptest.leeds.ac.uk / bionet / CAE-GROUP / SCL-WIN3x / SCL.EXE / GENNODEL.H < prev    next >
C/C++ Source or Header  |  1994-07-20  |  3KB  |  96 lines

  1.  
  2. #ifndef gennodel_h
  3. #define gennodel_h
  4.  
  5. /*
  6. * NIST Utils Class Library
  7. * clutils/gennodelist.h
  8. * February, 1994
  9. * David Sauder
  10. * K. C. Morris
  11.  
  12. * Development of this software was funded by the United States Government,
  13. * and is not subject to copyright.
  14. */
  15.  
  16. /* $Id: gennodelist.h,v 2.0.1.2 1994/04/05 16:44:08 sauderd Exp $  */ 
  17.  
  18. #ifdef __O3DB__
  19. #include <OpenOODB.h>
  20. #endif
  21.  
  22. #include <iostream.h>
  23.  
  24. //////////////////////////////////////////////////////////////////////////////
  25. // class GenNodeList
  26. // this class implements a doubly linked list by default.
  27. // If you delete this object it does not delete all of its entries,
  28. // only its head.  If you want it to delete all of its entries as well
  29. // as its head, you need to call DeleteEntries().
  30. //////////////////////////////////////////////////////////////////////////////
  31.  
  32. class GenNodeList {
  33. public:
  34.     GenNodeList(GenericNode *headNode);
  35.     virtual ~GenNodeList() { delete head; }
  36.  
  37.     GenericNode *GetHead()    { return head; }
  38.  
  39.     virtual void ClearEntries();
  40.     virtual void DeleteEntries();
  41.         // deletes node from its previous list & appends
  42.     virtual void Append(GenericNode *node);
  43.         // deletes newNode from its previous list & inserts in
  44.         //    relation to existNode
  45.     virtual void InsertAfter(GenericNode *newNode, GenericNode *existNode);
  46.     virtual void InsertBefore(GenericNode *newNode, GenericNode *existNode);
  47.  
  48.     virtual void Remove(GenericNode *node);
  49.  
  50. protected:
  51.     GenericNode *head;
  52. };
  53.  
  54. //////////////////////////////////////////////////////////////////////////////
  55. // class GenNodeList inline functions
  56. // these functions don't rely on any inline functions (its own or
  57. //    other classes) that aren't in this file
  58. //////////////////////////////////////////////////////////////////////////////
  59.  
  60. inline GenNodeList::GenNodeList(GenericNode *headNode)
  61. {
  62.     head = headNode;
  63.     head->next = head;
  64.     head->prev = head;
  65. }
  66.  
  67.         // inserts after existNode
  68. inline void GenNodeList::InsertAfter(GenericNode *newNode, 
  69.                      GenericNode *existNode)
  70. {
  71.     newNode->next = existNode->next;
  72.     newNode->next->prev = newNode;
  73.  
  74.     newNode->prev = existNode;
  75.     existNode->next = newNode;
  76. }
  77.  
  78.         // inserts before existNode
  79. inline void GenNodeList::InsertBefore(GenericNode *newNode, 
  80.                       GenericNode *existNode)
  81. {
  82.     existNode->prev->next = newNode;
  83.     newNode->prev = existNode->prev;
  84.  
  85.     newNode->next = existNode;
  86.     existNode->prev = newNode;
  87. }
  88.  
  89.     // inserts before the head node
  90. inline void GenNodeList::Append(GenericNode *node)
  91. {
  92.     InsertBefore(node, head);
  93. }
  94.  
  95. #endif
  96.