X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmath%2FSGVec4.hxx;h=f854274dd37bbae282d665665f8062897112ab48;hb=f7c6a5bfa2140c1d5ef54f3212067cd286e525f1;hp=d610a6ca8c11851285edfaa9a3f33f901cbf7a84;hpb=bd3518637cb9477313427745eff4038e0dafedfe;p=simgear.git diff --git a/simgear/math/SGVec4.hxx b/simgear/math/SGVec4.hxx index d610a6ca..f854274d 100644 --- a/simgear/math/SGVec4.hxx +++ b/simgear/math/SGVec4.hxx @@ -96,6 +96,8 @@ public: { data()[0] = d[0]; data()[1] = d[1]; data()[2] = d[2]; data()[3] = d[3]; } explicit SGVec4(const osg::Vec4d& d) { data()[0] = d[0]; data()[1] = d[1]; data()[2] = d[2]; data()[3] = d[3]; } + explicit SGVec4(const SGVec3& v3, const T& v4 = 0) + { data()[0] = v3[0]; data()[1] = v3[1]; data()[2] = v3[2]; data()[3] = v4; } /// Access by index, the index is unchecked @@ -342,6 +344,47 @@ bool operator!=(const SGVec4& v1, const SGVec4& v2) { return ! (v1 == v2); } +/// Return true if smaller, good for putting that into a std::map +template +inline +bool +operator<(const SGVec4& v1, const SGVec4& v2) +{ + if (v1(0) < v2(0)) return true; + else if (v2(0) < v1(0)) return false; + else if (v1(1) < v2(1)) return true; + else if (v2(1) < v1(1)) return false; + else if (v1(2) < v2(2)) return true; + else if (v2(2) < v1(2)) return false; + else return (v1(3) < v2(3)); +} + +template +inline +bool +operator<=(const SGVec4& v1, const SGVec4& v2) +{ + if (v1(0) < v2(0)) return true; + else if (v2(0) < v1(0)) return false; + else if (v1(1) < v2(1)) return true; + else if (v2(1) < v1(1)) return false; + else if (v1(2) < v2(2)) return true; + else if (v2(2) < v1(2)) return false; + else return (v1(3) <= v2(3)); +} + +template +inline +bool +operator>(const SGVec4& v1, const SGVec4& v2) +{ return operator<(v2, v1); } + +template +inline +bool +operator>=(const SGVec4& v1, const SGVec4& v2) +{ return operator<=(v2, v1); } + /// Return true if equal to the relative tolerance tol template inline