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_SSET_H__
00040 #define __NUSMV_CORE_UTILS_SSET_H__
00041
00042 #include "nusmv/core/utils/defs.h"
00043 #include "nusmv/core/cinit/NuSMVEnv.h"
00044
00045
00046
00047
00048
00055 typedef struct Sset_TAG* Sset_ptr;
00056
00062 #define SSET(x) \
00063 ((Sset_ptr) x)
00064
00070 #define SSET_CHECK_INSTANCE(x) \
00071 ( nusmv_assert(SSET(x) != SSET(NULL)) )
00072
00078 #define SSET_FOREACH(sset, iter) \
00079 for (iter=SSet_first(sset); SSiter_is_valid(iter); \
00080 iter=SSiter_next(iter))
00081
00082
00083
00095 typedef struct Ssnode_TAG* Ssnode_ptr;
00096
00102 typedef void* Sset_key;
00103
00104
00105
00106
00107
00108 typedef struct Ssiter_TAG {
00109 Ssnode_ptr node;
00110 } Ssiter;
00111
00112
00113
00114
00115
00122 Sset_ptr Sset_create(void);
00123
00130 Sset_ptr Sset_create_with_param(PFIVPVP compare);
00131
00140 void Sset_destroy(Sset_ptr self);
00141
00148 Sset_ptr Sset_copy(const Sset_ptr self);
00149
00157 Sset_ptr Sset_copy_func(const Sset_ptr self,
00158 void* (*func)(void*, void*), void* arg);
00159
00173 boolean Sset_insert(Sset_ptr self, Sset_key key,
00174 void* element);
00175
00186 Ssiter Sset_find(Sset_ptr self, Sset_key key);
00187
00200 Ssiter Sset_find_le(Sset_ptr self, Sset_key key);
00201
00214 Ssiter Sset_find_ge(Sset_ptr self, Sset_key key);
00215
00229 Ssiter Sset_find_insert(Sset_ptr self, Sset_key key,
00230 boolean* is_found);
00231
00244 void* Sset_delete(Sset_ptr self, Sset_key key,
00245 boolean* is_found);
00246
00262 void Sset_delete_iter(Sset_ptr self, Ssiter iter);
00263
00270 size_t Sset_get_size(Sset_ptr self);
00271
00278 boolean Sset_is_empty(Sset_ptr self);
00279
00294 Ssiter Sset_first(Sset_ptr self);
00295
00310 Ssiter Sset_last(Sset_ptr self);
00311
00322 Ssiter Ssiter_next(Ssiter iter);
00323
00334 Ssiter Ssiter_prev(Ssiter iter);
00335
00349 boolean Ssiter_is_valid(Ssiter iter);
00350
00360 void* Ssiter_element(Ssiter iter);
00361
00371 Sset_key Ssiter_key(Ssiter iter);
00372
00382 void Ssiter_set_element(Ssiter iter, void* element);
00383
00384 #ifndef NDEBUG
00385
00391 void Sset_test(const NuSMVEnv_ptr env);
00392 #endif
00393
00394 #endif