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 // SPOT_LTLAST_BINOP_HH