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
00034 class state
00035 {
00036 public:
00047 virtual int compare(const state* other) const = 0;
00048
00068 virtual size_t hash() const = 0;
00069
00071 virtual state* clone() const = 0;
00072
00073 virtual ~state()
00074 {
00075 }
00076 };
00077
00089 struct state_ptr_less_than :
00090 public std::binary_function<const state*, const state*, bool>
00091 {
00092 bool
00093 operator()(const state* left, const state* right) const
00094 {
00095 assert(left);
00096 return left->compare(right) < 0;
00097 }
00098 };
00099
00112 struct state_ptr_equal :
00113 public std::binary_function<const state*, const state*, bool>
00114 {
00115 bool
00116 operator()(const state* left, const state* right) const
00117 {
00118 assert(left);
00119 return 0 == left->compare(right);
00120 }
00121 };
00122
00135 struct state_ptr_hash :
00136 public std::unary_function<const state*, size_t>
00137 {
00138 size_t
00139 operator()(const state* that) const
00140 {
00141 assert(that);
00142 return that->hash();
00143 }
00144 };
00145
00146 }
00147
00148 #endif // SPOT_TGBA_STATE_HH