home *** CD-ROM | disk | FTP | other *** search
/ VRML Tools for 3D Cyberspace / VRML_Tools_For_3D_Cyberspace.iso / amber / include / slink.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-01  |  4.5 KB  |  199 lines

  1. ////////////////////////////////////////////////////////////////////////
  2. //  DIVE Laboratories, Inc.
  3. //  Copyright(c) 1995
  4. //**********************************************************************
  5. //  NOTICE: THIS [PROGRAM, DATABASE, DOCUMENT].CONSISTS OF TRADE SECRETS
  6. //  THAT ARE THE PROPERTY OF DIVE LABORATORIES, INC. THE CONTENTS MAY NOT 
  7. //  BE USED OR DISCLOSED WITHOUT EXPRESS WRITTEN PERMISSION OF THE OWNER.
  8. //**********************************************************************
  9. //  FILE:   SLINK.HPP
  10. //    ** VERSION: 2.0 ** ALPHA
  11. //
  12. //  DESCRIPTION
  13. //
  14. //  Author: Brian D. Green
  15. //
  16. //  Modification History:
  17. //  12/22/93 Created
  18. //    11/21/95 Version 2.0
  19. //    12/01/95 cat, += added
  20. //    12/03/95 find( void* ) added
  21. //
  22. ////////////////////////////////////////////////////////////////////////
  23.  
  24. #ifndef _SLINK2_HPP
  25. #define _SLINK2_HPP
  26. #include <stddef.h>
  27. #include <stdlib.h>
  28. #include <stdio.h>
  29. #include <string.h>
  30.  
  31. #ifndef TRUE
  32.   #define FALSE 0
  33.   #define TRUE  1
  34. #endif
  35.  
  36. #define     DEFAULT        -1
  37.  
  38. ////////////////////////////////////////////////////////////////////////
  39. // SINGLE LINK NODE CLASS
  40. //
  41. ////////////////////////////////////////////////////////////////////////
  42.  
  43. class sLinkNodeClass {
  44.  
  45.     private:
  46.  
  47.         static int nTotal;
  48.         static int nAlloc;
  49.         static int nDelete;
  50.  
  51. #ifdef SLINK_DEBUG
  52.         char    tword[64];
  53. #endif
  54.  
  55.     public:
  56.     
  57.         int     key;
  58.         void *obj;
  59.         sLinkNodeClass *next;
  60.  
  61.         void    stats( void );
  62.  
  63.         sLinkNodeClass( void* dataOBJ, int listKEY = DEFAULT );
  64.         sLinkNodeClass();
  65.         ~sLinkNodeClass();
  66. };
  67.  
  68.  
  69. ////////////////////////////////////////////////////////////////////////
  70. // DOUBLE LINK NODE CLASS
  71. //
  72. ////////////////////////////////////////////////////////////////////////
  73.  
  74. class dLinkNodeClass {
  75.  
  76.     private:
  77.  
  78.         static int nTotal;
  79.  
  80.     public:
  81.     
  82.         int     key;
  83.         void *obj;
  84.         dLinkNodeClass *next, *last;
  85.  
  86.         void    statistics( void );
  87.  
  88.         dLinkNodeClass( void* dataOBJ, int listKEY = DEFAULT );
  89.         dLinkNodeClass();
  90.         ~dLinkNodeClass();
  91. };
  92.  
  93.  
  94. ////////////////////////////////////////////////////////////////////////
  95. // SINGLE LINK LIST CLASS
  96. //
  97. ////////////////////////////////////////////////////////////////////////
  98.  
  99. class sLinkClass {
  100.   
  101.     protected:
  102.  
  103.         sLinkNodeClass *head, *tail, *listPtr;
  104.  
  105.         int listSZ;
  106.  
  107.  
  108.         void    remove( sLinkNodeClass *nPtr, sLinkNodeClass *pPtr );
  109.  
  110.  
  111.     public:
  112.  
  113.     ///////////////////////////////////////////////
  114.     // LIST MANIPULATION FCNS
  115.  
  116.         void     next();
  117.         void    clear();
  118.         void     reset();
  119.  
  120.         int    isEmpty();
  121.         int    atEnd();
  122.         int    length();
  123.  
  124.     
  125.     ///////////////////////////////////////////////
  126.     // DATA MANIPULATION FCNS
  127.   
  128.         int find( int listKEY );
  129.         int find( void *obj );
  130.         int findNext( int listKEY );
  131.  
  132.         int    inList( int listKEY );
  133.         int    inList( void *listOBJ);
  134.  
  135.         int    getKey();
  136.  
  137.         void  *get( void );
  138.         void  *getData( void );
  139.         void  *getData( int listKEY);
  140.         void  *getDataK( int& listKEY );
  141.  
  142.  
  143.         int    iterate( void* );
  144.         int    iterate( void* listOBJ, int& listKEY );
  145.  
  146.  
  147.     ///////////////////////////////////////////////
  148.     // DELETION FCNS
  149.              
  150.         void remove( int listKEY=DEFAULT );
  151.         void remove( void *listOBJ );
  152.  
  153.  
  154.     ///////////////////////////////////////////////
  155.     // LIST INSERTIONS:
  156.     //    add():    add node at the head of list
  157.     //    insert(): add node at current list position
  158.     //    append(): add node at tail of list
  159.     //    cat(): add list2 to end of the list
  160.  
  161.              
  162.         void add(     void *dataOBJ, int dataKEY = DEFAULT );
  163.         void insert( void *dataOBJ, int dataKEY = DEFAULT );    
  164.         void append( void *dataOBJ, int dataKEY = DEFAULT );
  165.  
  166.         void cat( sLinkClass *list2 );
  167.  
  168.         void orderedAdd( void *dataOBJ, int dataKEY );
  169.  
  170.  
  171.     ///////////////////////////////////////////////
  172.     // PRINTING: debug only
  173.  
  174.       void printK( int entireList = TRUE );
  175.  
  176.  
  177.     ///////////////////////////////////////////////
  178.     // overloaded operators
  179.  
  180.       void operator=( sLinkClass* otherList );
  181.       void operator+=( sLinkClass* otherList );
  182.              
  183.     ///////////////////////////////////////////////
  184.     // constructors & destructors
  185.  
  186.       sLinkClass();
  187.       sLinkClass( sLinkClass* otherList );
  188.  
  189.      ~sLinkClass();
  190. };
  191.  
  192. #endif
  193. //**********************************************************************
  194. //  NOTICE: THIS [PROGRAM, DATABASE, DOCUMENT].CONSISTS OF TRADE SECRETS
  195. //  THAT ARE THE PROPERTY OF DIVE LABORATORIES, INC. THE CONTENTS MAY NOT 
  196. //  BE USED OR DISCLOSED WITHOUT EXPRESS WRITTEN PERMISSION OF THE OWNER.
  197. //**********************************************************************
  198.  
  199.