home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / vrac / ll_class.zip / LL_CLASS.H < prev    next >
Text File  |  1994-09-17  |  6KB  |  134 lines

  1. /*
  2. ╔═══════════════════════════════════════════════════════════════════════════╗
  3. ║                                                                           ║
  4. ║                              LL_CLASS.H                                   ║
  5. ║                                                                           ║
  6. ╠═══════════════════════════════════════════════════════════════════════════╣
  7. ║                                                                           ║
  8. ║  Copyrighted 1994  by Dynamic Solutions                                   ║
  9. ║                       Rt 1, Box 185                                       ║
  10. ║                       Osage City, Kansas 66523-9744                       ║
  11. ║                                                                           ║
  12. ║  This file contains a Linked List object header file to be used with      ║
  13. ║  LL_CLASS.OBJ.                                                            ║
  14. ║                                                                           ║
  15. ╚═══════════════════════════════════════════════════════════════════════════╝
  16. */
  17.  
  18. #include <ALLOC.H>
  19.  
  20. #ifndef LINKLIST_CLASS
  21.    #define LINKLIST_CLASS
  22.  
  23.    /*.................................... NEAR vs FAR POINTERS & MACROS */
  24.  
  25.    #if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)
  26.       /*............................. define all list pointers as near    */
  27.       /*                              use for models tiny, small, medium  */
  28.       # define LL_PTR     *
  29.       # define LL_NEAR
  30.         typedef  void LL_PTR          VoidPtr;
  31.       # define LL_Malloc(MallocSize)((VoidPtr)(   malloc(       (size_t)MallocSize)))
  32.       # define LL_Free(Ptr)    free ((VoidPtr) Ptr )
  33.    #else
  34.       /*............................. define all list pointers as far     */
  35.       /*                              use for models compact, large, huge */
  36.       # define LL_PTR far *
  37.       # define LL_FAR
  38.         typedef  void LL_PTR          VoidPtr;
  39.       # define LL_Malloc(MallocSize)((VoidPtr)(farmalloc((unsigned long)MallocSize)))
  40.       # define LL_Free(Ptr) farfree ((VoidPtr) Ptr )
  41.    #endif
  42.  
  43.    typedef  char LL_PTR  CharPtr;
  44.  
  45.    /*............................ Linked List NODE definition structure */
  46.  
  47.    struct LLNodeType{
  48.                         struct  LLNodeType   *LLNodePtrNext;
  49.                         struct  LLNodeType   *LLNodePtrPrev;
  50.                         VoidPtr               LLNodePtrContents;
  51.                     };
  52.    typedef struct LLNodeType  LLNode;
  53.    typedef LLNode  LL_PTR     LLNodePtr;
  54.  
  55.    /*................................. Linked List Definition structure */
  56.  
  57.    struct LListType {
  58.                         LLNodePtr  LListPtrHead;
  59.                         LLNodePtr  LListPtrTail;
  60.                         int        LListLength;
  61.                     };
  62.    typedef struct LListType  LList;
  63.    typedef LList LL_PTR      LListPtr;
  64.  
  65.    /*............................................ Binary Tree structure */
  66.  
  67.    struct BTreeType {
  68.                         struct  BTreeType  *BTreeParent;
  69.                         struct  BTreeType  *BTreePrev;
  70.                         struct  BTreeType  *BTreeNext;
  71.                         LLNodePtr           SortData;
  72.                     };
  73.    typedef struct BTreeType  BTree;
  74.    typedef BTree LL_PTR      BTreePtr;
  75.  
  76.    /*............................................LINKED LIST PROTOTYPES */
  77.  
  78.    void     LList_InitErrMsg ( void );
  79.    LListPtr LList_Create     ( void );
  80.    void     LList_Print      ( LListPtr List,
  81.                                void (*PrintFunction)(VoidPtr) );
  82.    void     LList_Delete     ( LListPtr List );
  83.    void     LList_Sort       ( LListPtr List,
  84.                                int (*SortFunction)( VoidPtr, VoidPtr ) );
  85.  
  86.    /*.......................................LINKED LIST NODE PROTOTYPES */
  87.  
  88.    void  LLNode_AddAtHead    ( LListPtr List, VoidPtr NodeContent );
  89.    void  LLNode_AddAtTail    ( LListPtr List, VoidPtr NodeContent );
  90.    void  LLNode_Insert       ( LListPtr List, char Where,
  91.                                             LLNodePtr InsertPosition,
  92.                                             VoidPtr NodeContent );
  93.  
  94.    void  LLNode_DelHead      ( LListPtr List );
  95.    void  LLNode_DelTail      ( LListPtr List );
  96.    void  LLNode_DelNode      ( LListPtr List, LLNodePtr DeleteNode );
  97.  
  98.    void  LLNode_Swap         ( LListPtr List, LLNodePtr FromNode,
  99.                                               LLNodePtr ToNode );
  100.    void  LLNode_Move         ( LListPtr List, LLNodePtr MoveNode,
  101.                                   char Where, LLNodePtr ToNode );
  102.  
  103.    void  LLNode_PromoteToHead( LListPtr List, LLNodePtr MoveNode );
  104.    void  LLNode_DemoteToTail ( LListPtr List, LLNodePtr MoveNode );
  105.  
  106.    LLNodePtr LLNode_FindData   ( LListPtr List, VoidPtr Find,
  107.                                int (*FindFunction)(VoidPtr, VoidPtr) );
  108.    LLNodePtr LLNode_FindSub    ( LListPtr List, int Find );
  109.  
  110.    /*................................................. STACK PROTOTYPES */
  111.  
  112.  
  113.    void  Stack_Push ( LListPtr List, VoidPtr NodeContent ); /* = AddAtTail */
  114.    void  Stack_Pop  ( LListPtr List );                      /* = DelTail   */
  115.  
  116.    /*................................................. QUE   PROTOTYPES */
  117.  
  118.    void  Que_Push   ( LListPtr List, VoidPtr NodeContent ); /* = AddAtTail */
  119.    void  Que_Pop    ( LListPtr List );                      /* = DelHead   */
  120.  
  121.    #define BEFORE  (char)0
  122.    #define AFTER   (char)1
  123.  
  124.    /*............................................. GLOBAL Error Message */
  125.  
  126.       struct LL_ErrType {
  127.                            CharPtr Routine;
  128.                            CharPtr Msg;
  129.                         };
  130.       typedef struct LL_ErrType  LLErr;
  131.       typedef LLErr LL_PTR       LLErrPtr;
  132.  
  133. #endif
  134.