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
00043 #ifndef __NUSMV_CORE_SET_SET_H__
00044 #define __NUSMV_CORE_SET_SET_H__
00045
00046 #include "nusmv/core/utils/utils.h"
00047 #include "nusmv/core/utils/NodeList.h"
00048 #include "nusmv/core/node/printers/MasterPrinter.h"
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00153 typedef struct Set_TAG* Set_t;
00154
00160 typedef node_ptr Set_Element_t;
00161
00167 typedef ListIter_ptr Set_Iterator_t;
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00187 #define SET_FOREACH(set, iter) \
00188 for (iter=Set_GetFirstIter(set); !Set_IsEndIter(iter); \
00189 iter=Set_GetNextIter(iter))
00190
00196 #define SET_T(self) \
00197 ((Set_t)self)
00198
00204 #define SET_ELEMENT_T(self) \
00205 ((Set_Element_t)self)
00206
00207
00210
00211
00212
00213
00214
00220 Set_t Set_MakeEmpty(void);
00221
00229 Set_t Set_Make(node_ptr list);
00230
00236 Set_t Set_MakeFromUnion(NodeMgr_ptr nodemgr, node_ptr _union);
00237
00243 Set_t Set_MakeSingleton(Set_Element_t elem);
00244
00254 Set_t Set_Copy(const Set_t set);
00255
00263 void Set_ReleaseSet(Set_t set);
00264
00274 void Set_ReleaseSetOfSet(Set_t set);
00275
00276
00277
00278
00284 int Set_GiveCardinality(const Set_t set);
00285
00295 Set_t Set_AddMember(Set_t set, Set_Element_t el);
00296
00306 Set_t Set_RemoveMember(Set_t set, Set_Element_t el);
00307
00308
00309
00310
00316 boolean Set_IsEmpty(const Set_t set);
00317
00325 boolean Set_IsMember(const Set_t set, Set_Element_t elem);
00326
00333 boolean Set_Contains(const Set_t set1, const Set_t set2);
00334
00341 boolean Set_Equals(const Set_t set1, const Set_t set2);
00342
00349 boolean Set_Intersects(const Set_t set1, const Set_t set2);
00350
00356 boolean Set_IsFrozen(Set_t const set);
00357
00363 boolean Set_IsSingleton(Set_t const set);
00364
00365
00366
00367
00374 void set_pkg_init(void);
00375
00381 void set_pkg_quit(void);
00382
00383
00384
00385
00394 NodeList_ptr Set_Set2List(const Set_t set);
00395
00402 node_ptr Set_Set2Union(const Set_t set, NodeMgr_ptr nodemgr);
00403
00410 node_ptr Set_Set2Node(const Set_t set, NodeMgr_ptr nodemgr);
00411
00412
00413
00414
00424 void Set_PrintSet(MasterPrinter_ptr mprinter,
00425 FILE *, const Set_t set,
00426 void (*printer)(FILE* file,
00427 Set_Element_t el, void* arg),
00428 void* printer_arg);
00429
00430
00431
00432
00443 Set_Iterator_t Set_GetNextIter(Set_Iterator_t iter);
00444
00451 boolean Set_IsEndIter(Set_Iterator_t iter);
00452
00462 Set_Iterator_t Set_GetFirstIter(Set_t set1);
00463
00464
00465
00466
00472 Set_Element_t Set_GetMember(const Set_t set, Set_Iterator_t iter);
00473
00485 Set_t Set_GetRest(const Set_t set, Set_Iterator_t from);
00486
00487
00488
00489
00507 Set_t Set_Freeze(Set_t set);
00508
00519 Set_t Set_AddMembersFromList(Set_t set, const NodeList_ptr list);
00520
00536 Set_t Set_Union(Set_t set1, const Set_t set2);
00537
00549 Set_t Set_Intersection(Set_t set1, const Set_t set2);
00550
00562 Set_t Set_Difference(Set_t set1, const Set_t set2);
00563
00564
00567 #endif