MCPcopy Create free account
hub / github.com/Gecode/gecode / p_nooverlap

Function p_nooverlap

gecode/flatzinc/registry.cpp:1565–1607  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1563 }
1564
1565 void p_nooverlap(FlatZincSpace& s, const ConExpr& ce, AST::Node *ann) {
1566 IntVarArgs x0 = s.arg2intvarargs(ce[0]);
1567 IntVarArgs w = s.arg2intvarargs(ce[1]);
1568 IntVarArgs y0 = s.arg2intvarargs(ce[2]);
1569 IntVarArgs h = s.arg2intvarargs(ce[3]);
1570 if (w.assigned() && h.assigned()) {
1571 IntArgs iw(w.size());
1572 for (int i=w.size(); i--;)
1573 iw[i] = w[i].val();
1574 IntArgs ih(h.size());
1575 for (int i=h.size(); i--;)
1576 ih[i] = h[i].val();
1577 nooverlap(s,x0,iw,y0,ih,s.ann2ipl(ann));
1578
1579 int miny = y0[0].min();
1580 int maxy = y0[0].max();
1581 int maxdy = ih[0];
1582 for (int i=1; i<y0.size(); i++) {
1583 miny = std::min(miny,y0[i].min());
1584 maxy = std::max(maxy,y0[i].max());
1585 maxdy = std::max(maxdy,ih[i]);
1586 }
1587 int minx = x0[0].min();
1588 int maxx = x0[0].max();
1589 int maxdx = iw[0];
1590 for (int i=1; i<x0.size(); i++) {
1591 minx = std::min(minx,x0[i].min());
1592 maxx = std::max(maxx,x0[i].max());
1593 maxdx = std::max(maxdx,iw[i]);
1594 }
1595 if (miny > Int::Limits::min && maxy < Int::Limits::max) {
1596 cumulative(s,maxdy+maxy-miny,x0,iw,ih);
1597 cumulative(s,maxdx+maxx-minx,y0,ih,iw);
1598 }
1599 } else {
1600 IntVarArgs x1(x0.size()), y1(y0.size());
1601 for (int i=x0.size(); i--; )
1602 x1[i] = expr(s, x0[i] + w[i]);
1603 for (int i=y0.size(); i--; )
1604 y1[i] = expr(s, y0[i] + h[i]);
1605 nooverlap(s,x0,w,x1,y0,h,y1,s.ann2ipl(ann));
1606 }
1607 }
1608
1609 void p_precede(FlatZincSpace& s, const ConExpr& ce, AST::Node* ann) {
1610 IntVarArgs x = s.arg2intvarargs(ce[0]);

Callers

nothing calls this directly

Calls 12

nooverlapFunction · 0.85
cumulativeFunction · 0.85
arg2intvarargsMethod · 0.80
ann2iplMethod · 0.80
minFunction · 0.50
maxFunction · 0.50
exprFunction · 0.50
assignedMethod · 0.45
sizeMethod · 0.45
valMethod · 0.45
minMethod · 0.45
maxMethod · 0.45

Tested by

no test coverage detected