Skip to content

Commit aabb070

Browse files
committed
Updated eval interface
1 parent c336451 commit aabb070

File tree

5 files changed

+22
-48
lines changed

5 files changed

+22
-48
lines changed

eval/defs.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ MaybeVValue VarEnv::operator[](VKey k) const
4343

4444
FuncEnv::FuncEnv() {}
4545
FuncEnvType FuncEnv::mapping_ = {
46-
{"isEmpty", 0}, {"isMember", 1}, {"minElem", 2}, {"maxElem", 3}
47-
, {"compose", 4}, {"inv", 5}, {"image", 6}, {"preImage", 7}, {"dom", 8}
48-
, {"combine", 9}, {"firstInv", 10}, {"minMap", 11}, {"reduce", 12}
49-
, {"minAdj", 13}, {"mapInf", 14}, {"CC", 15}, {"matching", 16}, {"scc", 17}
50-
, {"sort", 18}, {"matchSCC", 19}, {"matchSCCTS", 20}, {"cut", 21}
46+
{"isEmpty", 0}, {"minElem", 1}, {"maxElem", 2}
47+
, {"compose", 3}, {"inv", 4}, {"image", 5}, {"preImage", 6}, {"dom", 7}
48+
, {"combine", 8}, {"firstInv", 9}, {"minMap", 10}, {"reduce", 11}
49+
, {"minAdj", 12}, {"mapInf", 13}, {"CC", 14}, {"matching", 15}, {"scc", 16}
50+
, {"sort", 17}, {"matchSCC", 18}, {"matchSCCTS", 19}, {"cut", 20}
5151
};
5252

5353
MaybeFValue FuncEnv::operator[](FKey k) const

eval/defs.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ struct FuncEnv{
121121
static FuncEnvType mapping_;
122122
};
123123

124-
typedef enum { empty, member, min, max, comp, inv, im, preim, dom, comb
124+
typedef enum { empty, min, max, comp, inv, im, preim, dom, comb
125125
, first_inv, min_map, red, min_adj, inf, connected, matching, scc, ts
126126
, match_scc, match_scc_ts, cut_set } Func;
127127

eval/visitors/eval_expr.cpp

+8-34
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,6 @@ namespace Eval {
2727
// Function visitors -----------------------------------------------------------
2828
// -----------------------------------------------------------------------------
2929

30-
auto member_visitor_ = Util::Overload {
31-
[](Util::NAT a, LIB::Interval b) { return b.isMember(a); },
32-
[](auto a, auto b) {
33-
Util::ERROR("member_visitor_: wrong arguments ", a, ", ", b
34-
, " for isMember\n");
35-
return false;
36-
}
37-
};
38-
3930
auto min_visitor_ = Util::Overload {
4031
[](LIB::Interval a) { return Util::MD_NAT(a.begin()); },
4132
[](LIB::MultiDimInter a) { return a.minElem(); },
@@ -407,24 +398,6 @@ ExprBaseType EvalExpression::operator()(AST::Call v) const
407398
}
408399
break;
409400

410-
case Eval::Func::member:
411-
if (eval_args.size() == 2) {
412-
arity_ok = true;
413-
414-
NatBaseType x = std::visit(EvalNatBT{}, eval_args[0]);
415-
Util::MD_NAT aux = std::get<Util::MD_NAT>(x);
416-
if (aux.arity() == 1) {
417-
ContainerBaseType container
418-
= std::visit(EvalContainer{}, eval_args[1]);
419-
bool result = std::visit(member_visitor_, NatBaseType(aux[0])
420-
, container);
421-
return Util::MD_NAT(result);
422-
}
423-
424-
return Util::MD_NAT(0);
425-
}
426-
break;
427-
428401
case Eval::Func::min:
429402
if (eval_args.size() == 1) {
430403
arity_ok = true;
@@ -754,8 +727,8 @@ ExprBaseType EvalExpression::operator()(AST::MultiDimInter v) const
754727
{
755728
SBG::LIB::SetPiece mdi = boost::apply_visitor(EvalMDI(env_), AST::Expr(v));
756729

757-
Util::ERROR_UNLESS(mdi.arity() == nmbr_dims_
758-
, "EvalExpr: nmbr_dims_: ", nmbr_dims_, "!= arity(", mdi, ")\n");
730+
Util::ERROR_UNLESS(mdi.arity() == nmbr_dims_ || mdi.arity() == 0
731+
, "EvalExpr: nmbr_dims_: ", nmbr_dims_, " != arity(", mdi, ")\n");
759732

760733
return mdi;
761734
}
@@ -765,8 +738,8 @@ ExprBaseType EvalExpression::operator()(AST::MDInterUnaryOp v) const
765738
EvalMDI visit_mdi(env_);
766739
LIB::MultiDimInter mdi = boost::apply_visitor(visit_mdi, v.e());
767740

768-
Util::ERROR_UNLESS(mdi.arity() == nmbr_dims_
769-
, "EvalExpr: nmbr_dims_: ", nmbr_dims_, "!= arity(", mdi, ")\n");
741+
Util::ERROR_UNLESS(mdi.arity() == nmbr_dims_ || mdi.arity() == 0
742+
, "EvalExpr: nmbr_dims_: ", nmbr_dims_, " != arity(", mdi, ")\n");
770743

771744
switch (v.op()) {
772745
case AST::ContainerUOp::card:
@@ -786,9 +759,10 @@ ExprBaseType EvalExpression::operator()(AST::MDInterBinOp v) const
786759
LIB::MultiDimInter l = boost::apply_visitor(visit_mdi, v.left());
787760
LIB::MultiDimInter r = boost::apply_visitor(visit_mdi, v.right());
788761

789-
Util::ERROR_UNLESS(l.arity() == nmbr_dims_ && r.arity() == nmbr_dims_
790-
,"EvalExpr: nmbr_dims_: ", nmbr_dims_
791-
, " != arity(", l, ") or arity(", r, ")\n");
762+
Util::ERROR_UNLESS((l.arity() == nmbr_dims_ && r.arity() == nmbr_dims_)
763+
|| l.arity() == 0 || r.arity() == 0
764+
,"EvalExpr: nmbr_dims_: ", nmbr_dims_, " != arity(", l, ") or arity(", r
765+
, ")\n");
792766

793767
switch (v.op()) {
794768
case AST::ContainerOp::cap:

parser/expr.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -444,8 +444,8 @@ ExprRule<Iterator>::ExprRule(Iterator &it) :
444444
| lexp_expr
445445
| arithmetic_expr
446446
| set_expr
447-
| interval_expr
448-
| mdi_expr;
447+
| mdi_expr
448+
| interval_expr;
449449

450450
expr_list = expr[phx::push_back(qi::_val, qi::_1)]
451451
>> *(COMA >> expr)[phx::push_back(qi::_val, qi::_1)];

test/eval/gt_data/interval/SBG.log

+6-6
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,31 @@ isEmpty([100:1:5])
2020
--> 1
2121

2222
[1:1:0]/\[100:1:500]
23-
--> [1:0]
23+
-->
2424

2525
[100:1:500]/\[1:1:0]
26-
--> [1:0]
26+
-->
2727

2828
[1:2:20]/\[4:3:20]
2929
--> [7:6:19]
3030

3131
[1:2:20]/\[2:2:20]
32-
--> [1:0]
32+
-->
3333

3434
[201:2:399]/\[200:4:400]
35-
--> [1:0]
35+
-->
3636

3737
[300:1:1000000]/\[300:1:500]
3838
--> [300:500]
3939

4040
minElem([500:5:499])
41-
--> 1
41+
-->
4242

4343
minElem([500:5:600])
4444
--> 500
4545

4646
maxElem([500:5:499])
47-
--> 0
47+
-->
4848

4949
maxElem([500:5:600])
5050
--> 600

0 commit comments

Comments
 (0)