25 #ifndef SPOT_LTLAST_MULTOP_HH
26 # define SPOT_LTLAST_MULTOP_HH
43 enum type { Or, OrRat, And, AndRat, AndNLM, Concat, Fusion };
46 typedef std::vector<const formula*>
vec;
123 static const formula* instance(type op,
vec* v);
125 virtual void accept(
visitor& v)
const;
130 return children_->size();
138 return (*children_)[n];
146 const formula* all_but(
unsigned n)
const;
152 unsigned boolean_count()
const;
163 const formula* boolean_operands(
unsigned* width = 0)
const;
172 const char* op_name()
const;
175 virtual std::string
dump()
const;
178 static unsigned instance_count();
181 static std::ostream& dump_instances(std::ostream& os);
184 typedef std::pair<type, vec*> pair;
189 operator()(
const pair& p1,
const pair& p2)
const
191 if (p1.first != p2.first)
192 return p1.first < p2.first;
193 return *p1.second < *p2.second;
196 typedef std::map<pair, const multop*, paircmp> map;
197 static map instances;
216 if (f->
kind() != formula::MultOp)
218 return static_cast<const multop*
>(f);
227 is_multop(
const formula* f, multop::type op)
229 if (
const multop* mo = is_multop(f))
241 is_multop(
const formula* f, multop::type op1, multop::type op2)
243 if (
const multop* mo = is_multop(f))
244 if (mo->op() == op1 || mo->op() == op2)
254 is_And(
const formula* f)
256 return is_multop(f, multop::And);
264 is_AndRat(
const formula* f)
266 return is_multop(f, multop::AndRat);
274 is_AndNLM(
const formula* f)
276 return is_multop(f, multop::AndNLM);
284 is_Or(
const formula* f)
286 return is_multop(f, multop::Or);
294 is_OrRat(
const formula* f)
296 return is_multop(f, multop::OrRat);
304 is_Concat(
const formula* f)
306 return is_multop(f, multop::Concat);
314 is_Fusion(
const formula* f)
316 return is_multop(f, multop::Fusion);
321 #endif // SPOT_LTLAST_MULTOP_HH