blob: 33aba30406effa3d871c96ae714c4f56acbf24f3 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
/* { dg-options "-O2 -ftree-tail-merge" } */
class v2d {
public:
double x;
double y;
};
class v3d {
public:
double x;
v3d() {}
v3d(const v2d & cr2Dv) {}
};
class e2d {
protected:
v2d _Min;
v2d _Max;
public:
int cop2d(const v2d & rPnt) const;
v2d clp2d(const v2d & rPnt) const;
};
inline int e2d::cop2d(const v2d & rPnt) const {
int bRet = 1;
if (rPnt.x < _Min.x) bRet = 0;
else if (rPnt.x > _Max.x) bRet = 0;
else if (rPnt.y > _Max.y) bRet = 0;
return bRet;
}
inline v2d e2d::clp2d(const v2d & rPnt) const {
v2d sRet = rPnt;
if (rPnt.x < _Min.x) sRet.x = _Min.x;
if (rPnt.y < _Min.y) sRet.y = _Min.y;
if (rPnt.x > _Max.x) sRet.x = _Max.x;
if (rPnt.y > _Max.y) sRet.y = _Max.y;
return sRet;
}
class sExt {
protected:
e2d _Dom;
long eval() const;
long evalPoint(const v2d & crUV, v3d & rPnt) const;
};
long sExt::evalPoint(const v2d & crUV, v3d & rPnt) const {
v3d sUV = crUV;
if (!_Dom.cop2d(crUV)) {
sUV = _Dom.clp2d(crUV);
}
return eval();
}