1 /*---------------------------------------------------------------------------- 2 -- 3 -- Module: LstLinked 4 -- 5 -- Project: Tools - General C objects. 6 -- System: Lst - Linked lists. 7 -- Subsystem: <> 8 -- Function block: <> 9 -- 10 -- Description: 11 -- Interface file for module LstLinked. 12 -- 13 -- Filename: LstLinked.h 14 -- 15 -- Authors: Roger Larsson, Ulrika Bornetun 16 -- Creation date: 1990-12-01 17 -- 18 -- 19 -- (C) Copyright Ulrika Bornetun, Roger Larsson (1995) 20 -- All rights reserved 21 -- 22 -- Permission to use, copy, modify, and distribute this software and its 23 -- documentation for any purpose and without fee is hereby granted, 24 -- provided that the above copyright notice appear in all copies. Ulrika 25 -- Bornetun and Roger Larsson make no representations about the usability 26 -- of this software for any purpose. It is provided "as is" without express 27 -- or implied warranty. 28 ----------------------------------------------------------------------------*/ 29 30 /* SCCS module identifier. */ 31 /* SCCSID = @(#) Module: LstLinked.h, Version: 1.1, Date: 95/02/18 14:32:28 */ 32 33 34 /* Only include this module once. */ 35 #ifndef define_LstLinked_h 36 # define define_LstLinked_h 37 38 39 /*---------------------------------------------------------------------------- 40 -- Include files 41 ----------------------------------------------------------------------------*/ 42 43 44 /*---------------------------------------------------------------------------- 45 -- Macro definitions 46 ----------------------------------------------------------------------------*/ 47 48 49 /*---------------------------------------------------------------------------- 50 -- Type declarations 51 ----------------------------------------------------------------------------*/ 52 53 typedef enum { LST_OK, LST_ERROR, LST_STUCK, LST_NOT_FOUND } LST_STATUS; 54 55 typedef enum { LST_FORWARD, LST_BACKWARD } LST_DIRECTION; 56 57 typedef enum { 58 LST_EQUAL, LST_NOT_EQUAL, LST_GREATER_THAN, LST_LESS_THAN 59 } LST_COMPARE; 60 61 62 typedef LST_COMPARE ( *EQUALS_FUNC_TYPE ) (void *, void *); 63 64 typedef void ( *CLEAR_DATA_FUNC_TYPE ) (void *); 65 66 typedef struct LST_RECORD_TYPE_ { 67 void *record; 68 struct LST_RECORD_TYPE_ *next; 69 struct LST_RECORD_TYPE_ *previous; 70 } LST_RECORD_TYPE; 71 72 typedef struct { 73 int record_size; 74 int elements; 75 LST_RECORD_TYPE *head; 76 LST_RECORD_TYPE *tail; 77 LST_RECORD_TYPE *current; 78 EQUALS_FUNC_TYPE equals_func; 79 } LST_DESC_RECORD, *LST_DESC_TYPE; 80 81 82 /*---------------------------------------------------------------------------- 83 -- Global definitions 84 ----------------------------------------------------------------------------*/ 85 86 87 /*---------------------------------------------------------------------------- 88 -- Function prototypes 89 ----------------------------------------------------------------------------*/ 90 91 void 92 LstLinkClear( LST_DESC_TYPE list_desc ); 93 94 void 95 LstLinkClearDataAndList( LST_DESC_TYPE list_desc, 96 CLEAR_DATA_FUNC_TYPE clear_func ); 97 98 LST_STATUS 99 LstLinkCurrentFirst( LST_DESC_TYPE list_desc ); 100 101 LST_STATUS 102 LstLinkCurrentLast( LST_DESC_TYPE list_desc ); 103 104 LST_STATUS 105 LstLinkCurrentNext( LST_DESC_TYPE list_desc ); 106 107 LST_STATUS 108 LstLinkCurrentPosition( LST_DESC_TYPE list_desc, 109 int position ); 110 111 LST_STATUS 112 LstLinkCurrentPrevious( LST_DESC_TYPE list_desc ); 113 114 LST_STATUS 115 LstLinkDeleteCurrent( LST_DESC_TYPE list_desc ); 116 117 LST_STATUS 118 LstLinkDeleteFirst( LST_DESC_TYPE list_desc ); 119 120 LST_STATUS 121 LstLinkDeleteLast( LST_DESC_TYPE list_desc ); 122 123 int 124 LstLinkElements( LST_DESC_TYPE list_desc ); 125 126 LST_STATUS 127 LstLinkGetCurrent( LST_DESC_TYPE list_desc, 128 void *record ); 129 130 LST_STATUS 131 LstLinkGetFirst( LST_DESC_TYPE list_desc, 132 void *record ); 133 134 LST_STATUS 135 LstLinkGetLast( LST_DESC_TYPE list_desc, 136 void *record ); 137 138 void 139 *LstLinkGetCurrentRef( LST_DESC_TYPE list_desc ); 140 141 LST_STATUS 142 LstLinkInsertCurrent( LST_DESC_TYPE list_desc, 143 void *record ); 144 145 LST_STATUS 146 LstLinkInsertFirst( LST_DESC_TYPE list_desc, 147 void *record ); 148 149 LST_STATUS 150 LstLinkInsertLast( LST_DESC_TYPE list_desc, 151 void *record ); 152 153 LST_DESC_TYPE 154 LstLinkNew( int record_size, 155 EQUALS_FUNC_TYPE equals_func ); 156 157 LST_STATUS 158 LstLinkSearchCurrent( LST_DESC_TYPE list_desc, 159 void *element, 160 LST_DIRECTION direction, 161 EQUALS_FUNC_TYPE equals_func ); 162 163 LST_STATUS 164 LstLinkSearchFirst( LST_DESC_TYPE list_desc, 165 void *element, 166 EQUALS_FUNC_TYPE equals_func ); 167 168 LST_STATUS 169 LstLinkSearchLast( LST_DESC_TYPE list_desc, 170 void *element, 171 EQUALS_FUNC_TYPE equals_func ); 172 173 LST_STATUS 174 LstLinkSetCurrent( LST_DESC_TYPE list_desc, 175 void *record ); 176 177 LST_STATUS 178 LstLinkSetFirst( LST_DESC_TYPE list_desc, 179 void *record ); 180 181 LST_STATUS 182 LstLinkSetLast( LST_DESC_TYPE list_desc, 183 void *record ); 184 185 #endif 186