00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef SPOT_TGBA_STATE_HH
00023 # define SPOT_TGBA_STATE_HH
00024
00025 #include <cstddef>
00026 #include <bdd.h>
00027 #include <cassert>
00028 #include <functional>
00029
00030 namespace spot
00031 {
00032
00035 class state
00036 {
00037 public:
00048 virtual int compare(const state* other) const = 0;
00049
00069 virtual size_t hash() const = 0;
00070
00072 virtual state* clone() const = 0;
00073
00074 virtual ~state()
00075 {
00076 }
00077 };
00078
00091 struct state_ptr_less_than:
00092 public std::binary_function<const state*, const state*, bool>
00093 {
00094 bool
00095 operator()(const state* left, const state* right) const
00096 {
00097 assert(left);
00098 return left->compare(right) < 0;
00099 }
00100 };
00101
00115 struct state_ptr_equal:
00116 public std::binary_function<const state*, const state*, bool>
00117 {
00118 bool
00119 operator()(const state* left, const state* right) const
00120 {
00121 assert(left);
00122 return 0 == left->compare(right);
00123 }
00124 };
00125
00140 struct state_ptr_hash:
00141 public std::unary_function<const state*, size_t>
00142 {
00143 size_t
00144 operator()(const state* that) const
00145 {
00146 assert(that);
00147 return that->hash();
00148 }
00149 };
00150
00151 }
00152
00153 #endif // SPOT_TGBA_STATE_HH