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