00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00027
#ifndef SPOT_LTLAST_BINOP_HH
00028
# define SPOT_LTLAST_BINOP_HH
00029
00030
#include <map>
00031
#include "refformula.hh"
00032
00033
namespace spot
00034 {
00035
namespace ltl
00036 {
00037
00039 class binop :
public ref_formula
00040 {
00041
public:
00046 enum type {
Xor,
Implies,
Equiv,
U,
R };
00047
00050
static binop*
instance(type op,
formula* first,
formula* second);
00051
00052
virtual void accept(
visitor& v);
00053
virtual void accept(
const_visitor& v)
const;
00054
00056
const formula*
first() const;
00058
formula* first();
00060 const
formula* second() const;
00062
formula* second();
00063
00065 type op() const;
00067 const
char* op_name() const;
00068
00070 static
unsigned instance_count();
00071
00072 protected:
00073 typedef std::
pair<
formula*, formula*>
pairf;
00074 typedef std::
pair<type, pairf>
pair;
00075 typedef std::
map<pair, formula*>
map;
00076 static map instances;
00077
00078
binop(type op, formula* first, formula* second);
00079 virtual ~
binop();
00080
00081 private:
00082 type op_;
00083 formula* first_;
00084 formula* second_;
00085 };
00086
00087 }
00088 }
00089
00090 #endif