00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00039 #ifndef __NUSMV_CORE_UTILS_SLIST_H__
00040 #define __NUSMV_CORE_UTILS_SLIST_H__
00041
00042 #include "nusmv/core/utils/defs.h"
00043 #include "nusmv/core/node/printers/MasterPrinter.h"
00044
00045
00046
00047
00048
00055 typedef struct Slist_TAG* Slist_ptr;
00056
00062 #define SLIST(x) \
00063 ((Slist_ptr) x)
00064
00070 #define SLIST_CHECK_INSTANCE(x) \
00071 ( nusmv_assert(SLIST(x) != SLIST(NULL)) )
00072
00078 #define SLIST_FOREACH(list, iter) \
00079 for (iter=Slist_first(list); !Siter_is_end(iter); \
00080 iter=Siter_next(iter))
00081
00082
00083
00084
00091 typedef struct Snode_TAG* Snode_ptr;
00092
00093
00094
00095
00096
00097
00098 typedef struct Siter_TAG {Snode_ptr node;} Siter;
00099
00100
00101
00107 typedef void (*Slist_free_function)(void*);
00108
00109
00110
00111
00112
00119 Slist_ptr Slist_create(void);
00120
00129 void Slist_destroy(Slist_ptr self);
00130
00138 void Slist_destroy_and_free_elements(Slist_ptr self,
00139 Slist_free_function f);
00140
00149 Slist_ptr Slist_copy(Slist_ptr self);
00150
00160 Slist_ptr Slist_copy_reversed(Slist_ptr self);
00161
00172 void Slist_reverse(Slist_ptr self);
00173
00182 void Slist_push(Slist_ptr self, void* element);
00183
00194 void* Slist_pop(Slist_ptr self);
00195
00204 void* Slist_top(Slist_ptr self);
00205
00212 boolean Slist_is_empty(Slist_ptr self);
00213
00227 Siter Slist_first(Slist_ptr self);
00228
00240 Siter Slist_end(void);
00241
00251 boolean Siter_is_end(Siter iter);
00252
00261 boolean Siter_is_last(Siter iter);
00262
00272 Siter Siter_next(Siter iter);
00273
00283 void* Siter_element(Siter iter);
00284
00296 Siter Slist_find(Slist_ptr self, const void* element);
00297
00306 boolean Slist_contains(Slist_ptr self, const void* element);
00307
00318 boolean Slist_remove(Slist_ptr self, const void* element);
00319
00328 void Slist_append(Slist_ptr self, const Slist_ptr other);
00329
00337 boolean Slist_equals(const Slist_ptr self, const Slist_ptr other);
00338
00347 unsigned int Slist_get_size(Slist_ptr self);
00348
00359 void Slist_sort(Slist_ptr self,
00360 int (*cmp)(void* el1, void* el2, void* extra),
00361 void* extra);
00362
00369 void Slist_clear(Slist_ptr self);
00370
00380 void Slist_print(Slist_ptr const self,
00381 MasterPrinter_ptr wffprint,
00382 void (*printer)(FILE* file, void* el, void* arg),
00383 FILE* file,
00384 void* printer_arg);
00385
00386 #endif