00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00024
#ifndef SPOT_LTLAST_MULTOP_HH
00025
# define SPOT_LTLAST_MULTOP_HH
00026
00027
#include <vector>
00028
#include <map>
00029
#include "refformula.hh"
00030
00031
namespace spot
00032 {
00033
namespace ltl
00034 {
00035
00039 class multop :
public ref_formula
00040 {
00041
public:
00042 enum type {
Or,
And };
00043
00045 typedef std::vector<formula*>
vec;
00046
00059
static formula*
instance(type op,
formula* first,
formula* second);
00060
00073
static formula*
instance(type op,
vec* v);
00074
00075
virtual void accept(
visitor& v);
00076
virtual void accept(
const_visitor& v)
const;
00077
00079
unsigned size() const;
00083 const
formula* nth(
unsigned n) const;
00087
formula* nth(
unsigned n);
00088
00090 type op() const;
00092 const
char* op_name() const;
00093
00095 static
unsigned instance_count();
00096
00097 protected:
00098 typedef std::
pair<type,
vec*>
pair;
00100 struct
paircmp
00101 {
00102
bool
00103 operator () (
const pair& p1,
const pair& p2)
const
00104
{
00105
if (p1.first != p2.first)
00106
return p1.first < p2.first;
00107
return *p1.second < *p2.second;
00108 }
00109 };
00110 typedef std::map<pair, formula*, paircmp>
map;
00111 static map instances;
00112
00113
multop(type op,
vec* v);
00114
virtual ~multop();
00115
00116
private:
00117 type op_;
00118 vec*
children_;
00119 };
00120
00121 }
00122 }
00123
00124
#endif // SPOT_LTLAST_MULTOP_HH