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_OLIST_H__
00040 #define __NUSMV_CORE_UTILS_OLIST_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 Olist_TAG* Olist_ptr;
00056
00062 #define OLIST(x) \
00063 ((Olist_ptr) x)
00064
00070 #define OLIST_CHECK_INSTANCE(x) \
00071 ( nusmv_assert(OLIST(x) != OLIST(NULL)) )
00072
00078 #define OLIST_FOREACH(list, iter) \
00079 for (iter = Olist_first(list); !Oiter_is_end(iter); iter = Oiter_next(iter))
00080
00081
00082
00089 typedef struct Onode_TAG* Onode_ptr;
00090
00091
00092 typedef struct Oiter_TAG {Onode_ptr* node;} Oiter;
00093
00094
00095
00096
00097
00098
00105 Olist_ptr Olist_create(void);
00106
00115 void Olist_destroy(Olist_ptr self);
00116
00125 Olist_ptr Olist_copy(Olist_ptr self);
00126
00136 Olist_ptr Olist_copy_reversed(Olist_ptr self);
00137
00147 Olist_ptr Olist_copy_without_element(Olist_ptr self,
00148 void* element);
00149
00159 void Olist_reverse(Olist_ptr self);
00160
00176 void Olist_move(Olist_ptr self, Olist_ptr to_list,
00177 Oiter iter_to);
00178
00190 void Olist_move_all(Olist_ptr self, Olist_ptr to_list);
00191
00205 void Olist_clean(Olist_ptr self);
00206
00215 void Olist_concat(Olist_ptr self, Olist_ptr other);
00216
00223 void Olist_prepend(Olist_ptr self, void* element);
00224
00231 void Olist_append(Olist_ptr self, void* element);
00232
00248 void* Olist_delete_first(Olist_ptr self);
00249
00256 int Olist_get_size(const Olist_ptr self);
00257
00264 boolean Olist_is_empty(Olist_ptr self);
00265
00281 Oiter Olist_first(Olist_ptr self);
00282
00296 Oiter Olist_last(Olist_ptr self);
00297
00311 Oiter Olist_end(Olist_ptr self);
00312
00321 boolean Olist_iter_is_first(Olist_ptr self, Oiter iter);
00322
00332 boolean Oiter_is_end(Oiter iter);
00333
00342 boolean Olist_iter_is_last(Olist_ptr self, Oiter iter);
00343
00353 Oiter Oiter_next(Oiter iter);
00354
00364 void* Oiter_element(Oiter iter);
00365
00375 void Oiter_set_element(Oiter iter, void* element);
00376
00394 Oiter Olist_insert_after(Olist_ptr self, Oiter iter,
00395 void* element);
00396
00414 Oiter Olist_insert_before(Olist_ptr self, Oiter iter,
00415 void* element);
00416
00439 Oiter Olist_delete(Olist_ptr self, Oiter iter, void** element);
00440
00447 boolean Olist_contains(const Olist_ptr self, const void* element);
00448
00457 boolean Olist_remove(Olist_ptr self, const void* element);
00458
00469 void Olist_sort(Olist_ptr self,
00470 int (*cmp)(void* el1, void* el2, void* extra),
00471 void* extra);
00472
00481 void Olist_print_node(Olist_ptr self,
00482 MasterPrinter_ptr printer, FILE* output);
00483
00493 void olist_testing_function(const NuSMVEnv_ptr env);
00494
00502 void
00503 Olist_map(Olist_ptr self, void (*func)(void* elem));
00504
00505 #endif