00001
00002
00003
00004
00005
00006
00007 #ifndef LS_DEFINED
00008 #define LS_DEFINED
00009
00010 #ifdef __cplusplus
00011 extern "C" {
00012 #endif
00013
00014
00015
00016
00017
00018
00019
00020
00021 typedef void ls_dummy;
00022
00023 typedef ls_dummy *lsList;
00024 typedef ls_dummy *lsGen;
00025 typedef ls_dummy *lsHandle;
00026 typedef int lsStatus;
00027 typedef char *lsGeneric;
00028
00029 #define LS_NIL 0
00030
00031 #define LS_BADSTATE -3
00032 #define LS_BADPARAM -2
00033 #define LS_NOMORE -1
00034
00035 #define LS_OK 0
00036
00037 #define LS_BEFORE 1
00038 #define LS_AFTER 2
00039 #define LS_STOP 3
00040 #define LS_DELETE 4
00041
00042
00043
00044
00045
00046
00047 #define LS_NH (lsHandle *) 0
00048
00049 typedef lsGeneric (*LS_PFLSG) ();
00050
00051 extern lsList lsCreate (void);
00052
00053 extern lsStatus lsDestroy (lsList, void (*)());
00054
00055 extern lsList lsCopy (lsList, LS_PFLSG);
00056
00057
00058 extern lsStatus lsFirstItem (lsList, lsGeneric *, lsHandle *);
00059
00060 extern lsStatus lsLastItem (lsList, lsGeneric *, lsHandle *);
00061
00062
00063 extern lsStatus lsNewBegin (lsList, lsGeneric, lsHandle *);
00064
00065 extern lsStatus lsNewEnd (lsList, lsGeneric, lsHandle *);
00066
00067
00068 extern lsStatus lsDelBegin (lsList, lsGeneric *);
00069
00070 extern lsStatus lsDelEnd (lsList, lsGeneric *);
00071
00072
00073 extern int lsLength (lsList);
00074
00075
00076 extern lsGen lsStart (lsList);
00077
00078 extern lsGen lsEnd (lsList);
00079
00080 extern lsGen lsGenHandle (lsHandle, lsGeneric *, int);
00081
00082 extern lsStatus lsNext (lsGen, lsGeneric *, lsHandle *);
00083
00084 extern lsStatus lsPrev (lsGen, lsGeneric *, lsHandle *);
00085
00086 extern lsStatus lsInBefore (lsGen, lsGeneric, lsHandle *);
00087
00088 extern lsStatus lsInAfter (lsGen, lsGeneric, lsHandle *);
00089
00090 extern lsStatus lsDelBefore (lsGen, lsGeneric *);
00091
00092 extern lsStatus lsDelAfter (lsGen, lsGeneric *);
00093
00094 extern lsStatus lsFinish (lsGen);
00095
00096
00097 extern lsList lsQueryHandle (lsHandle);
00098
00099 extern lsGeneric lsFetchHandle (lsHandle);
00100
00101 extern lsStatus lsRemoveItem (lsHandle, lsGeneric *);
00102
00103
00104 extern lsStatus lsSort (lsList, int (*)());
00105
00106
00107 extern lsStatus lsUniq (lsList, int (*)(), void (*)());
00108
00109
00110
00111
00112
00113
00114
00115
00116 #define lsForEachItem( \
00117 list, \
00118 gen, \
00119 data \
00120 ) \
00121 for(gen = lsStart(list); \
00122 (lsNext(gen, (lsGeneric *) &data, LS_NH) == LS_OK) \
00123 || ((void) lsFinish(gen), 0); \
00124 )
00125
00126 #ifdef __cplusplus
00127 }
00128 #endif
00129
00130 #endif