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