home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / 3DTOSHI2.ZIP / mpgfx / include / gfxllist.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-23  |  3.5 KB  |  137 lines

  1.  
  2. // gfxllist.h
  3. //
  4. // Copyright (c) 1995 by Toshiaki Tsuji, all rights reserved.
  5.  
  6. #ifndef __GFXLLIST_H__
  7. #define __GFXLLIST_H__
  8.  
  9. #include "stdgfx.h"
  10. #include "gfxadst.h"
  11.  
  12. template <class Type>
  13. class LISTOBJECT : public DATAOBJECT
  14.   {
  15.     public :
  16.       LISTOBJECT<Type> *PrevObject;
  17.       LISTOBJECT<Type> *NextObject;
  18.       Type Data;
  19.  
  20.       LISTOBJECT () : DATAOBJECT ()
  21.         {
  22.           PrevObject = NextObject = NULL;
  23.         }; // End of Constructor for LISTOBJECT
  24.  
  25.       virtual ~LISTOBJECT ()
  26.         {
  27.           if (NextObject!=NULL)
  28.             delete NextObject;
  29.           NextObject = PrevObject = NULL;
  30.         }; // End of Destructor for LISTOBJECT
  31.   }; // End of LISTOBJECT
  32.  
  33. template <class Type>
  34. class LINKEDLIST : public ADST
  35.   {
  36.     protected :
  37.       LISTOBJECT<Type> *Head;
  38.       LISTOBJECT<Type> *Tail;
  39.  
  40.     public :
  41.       LINKEDLIST () : ADST ()
  42.         {
  43.           Head = Tail = NULL;
  44.         }; // End of Constructor for LINKEDLIST
  45.  
  46.       virtual ~LINKEDLIST ()
  47.         {
  48.           while (Head!=NULL)
  49.             {
  50.               RemoveNode ( Head );
  51.             } // End while
  52.           Head = Tail = NULL;
  53.         }; // End of Destructor for LINKEDLIST
  54.  
  55.       LISTOBJECT<Type>* GetHead () { return Head; };
  56.       LISTOBJECT<Type>* GetTail () { return Tail; };
  57.  
  58.       BOOLEAN AddObject ( Type Data )
  59.         {
  60.           LISTOBJECT<Type> *NewNode;
  61.  
  62.           NewNode = new LISTOBJECT<Type> ();
  63.           if (NewNode==NULL)
  64.             return FALSE;
  65.  
  66.           NewNode->Data = Data;
  67.  
  68.           // Add it to list
  69.           if (Head==NULL) // If empty
  70.             {
  71.               Head = NewNode;
  72.               Tail = Head;
  73.               NumObjects = 1;
  74.             } // End if
  75.           else
  76.             {
  77.               Tail->NextObject = NewNode;
  78.               NewNode->PrevObject = Tail;
  79.               Tail = NewNode;
  80.               NumObjects++;
  81.             } // End else
  82.           return TRUE;
  83.         }; // End of AddObject for LINKEDLIST
  84.  
  85.       VOID DiscardNode ( LISTOBJECT<Type> *Node )
  86.         {
  87.           if (Node==NULL)
  88.             return;
  89.           if (Node->PrevObject==NULL) // If Head
  90.             {
  91.               Head = Node->NextObject;
  92.               if (Head==NULL)
  93.                 Tail = NULL;
  94.               else
  95.                 Head->PrevObject = NULL;
  96.             } // End if
  97.           else
  98.             {
  99.               Node->PrevObject->NextObject = Node->NextObject;
  100.               if (Node->NextObject==NULL) // If Last
  101.                 {
  102.                   Tail = Node->PrevObject;
  103.                 } // End if
  104.               else
  105.                 {
  106.                   Node->NextObject->PrevObject =
  107.                                       Node->PrevObject;
  108.                 } // End else
  109.             } // End else
  110.           Node->NextObject = NULL;
  111.           Node->PrevObject = NULL;
  112.           NumObjects--;
  113.         }; // End of DiscardObject for LINKEDLIST
  114.  
  115.       VOID RemoveNode ( LISTOBJECT<Type>* Node )
  116.         {
  117.           if (Node==NULL)
  118.             return;
  119.           DiscardNode ( Node );
  120.           delete Node;
  121.         }; // End of RemoveObject for LINKEDLIST
  122.  
  123.       VOID ClearAllNode ()
  124.         {
  125.           while (Head!=NULL)
  126.             {
  127.               if (Head->Data!=NULL)
  128.                 delete Head->Data;
  129.               Head->Data = NULL;
  130.               RemoveNode ( Head );  
  131.             } // End while
  132.           Head = Tail = NULL;  
  133.         }; // End of ClearNode for LINKEDLIST  
  134.   }; // End of LINKEDLIST
  135.  
  136. #endif
  137.