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