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
00040 class binop : public ref_formula
00041 {
00042 public:
00047 enum type { Xor, Implies, Equiv, U, R };
00048
00051 static binop* instance(type op, formula* first, formula* second);
00052
00053 virtual void accept(visitor& v);
00054 virtual void accept(const_visitor& v) const;
00055
00057 const formula* first() const;
00059 formula* first();
00061 const formula* second() const;
00063 formula* second();
00064
00066 type op() const;
00068 const char* op_name() const;
00069
00071 static unsigned instance_count();
00072
00073 protected:
00074 typedef std::pair<formula*, formula*> pairf;
00075 typedef std::pair<type, pairf> pair;
00076 typedef std::map<pair, formula*> map;
00077 static map instances;
00078
00079 binop(type op, formula* first, formula* second);
00080 virtual ~binop();
00081
00082 private:
00083 type op_;
00084 formula* first_;
00085 formula* second_;
00086 };
00087
00088 }
00089 }
00090
00091 #endif // SPOT_LTLAST_BINOP_HH