Index: src/pathops/SkPathOpsPoint.h |
diff --git a/src/pathops/SkPathOpsPoint.h b/src/pathops/SkPathOpsPoint.h |
index 2d07427783c669d4faee2c926dc71ef9129d175a..7ddfbfb5d15bce28b46643e2cd7b46122e22fcfc 100644 |
--- a/src/pathops/SkPathOpsPoint.h |
+++ b/src/pathops/SkPathOpsPoint.h |
@@ -25,25 +25,21 @@ |
friend SkDPoint operator+(const SkDPoint& a, const SkDVector& b); |
- // only used by testing |
void operator+=(const SkDVector& v) { |
fX += v.fX; |
fY += v.fY; |
} |
- // only called by nearestT, which is currently only used by testing |
void operator-=(const SkDVector& v) { |
fX -= v.fX; |
fY -= v.fY; |
} |
- // only used by testing |
void operator/=(const double s) { |
fX /= s; |
fY /= s; |
} |
- // only used by testing |
void operator*=(const double s) { |
fX *= s; |
fY *= s; |
@@ -54,7 +50,6 @@ |
return v; |
} |
- // only used by testing |
double cross(const SkDVector& a) const { |
return fX * a.fY - fY * a.fX; |
} |
@@ -103,13 +98,11 @@ |
fY = pt.fY; |
} |
- // only used by testing |
void operator+=(const SkDVector& v) { |
fX += v.fX; |
fY += v.fY; |
} |
- // only used by testing |
void operator-=(const SkDVector& v) { |
fX -= v.fX; |
fY -= v.fY; |
@@ -129,7 +122,7 @@ |
double tiniest = SkTMin(SkTMin(SkTMin(fX, a.fX), fY), a.fY); |
double largest = SkTMax(SkTMax(SkTMax(fX, a.fX), fY), a.fY); |
largest = SkTMax(largest, -tiniest); |
- return AlmostPequalUlps(largest, largest + dist); // is the dist within ULPS tolerance? |
+ return AlmostBequalUlps(largest, largest + dist); // is the dist within ULPS tolerance? |
} |
bool approximatelyEqual(const SkPoint& a) const { |
@@ -152,10 +145,44 @@ |
float tiniest = SkTMin(SkTMin(SkTMin(a.fX, b.fX), a.fY), b.fY); |
float largest = SkTMax(SkTMax(SkTMax(a.fX, b.fX), a.fY), b.fY); |
largest = SkTMax(largest, -tiniest); |
- return AlmostPequalUlps((double) largest, largest + dist); // is dist within ULPS tolerance? |
- } |
- |
- // only used by testing |
+ return AlmostBequalUlps((double) largest, largest + dist); // is dist within ULPS tolerance? |
+ } |
+ |
+ static bool RoughlyEqual(const SkPoint& a, const SkPoint& b) { |
+ if (approximately_equal(a.fX, b.fX) && approximately_equal(a.fY, b.fY)) { |
+ return true; |
+ } |
+ return RoughlyEqualUlps(a.fX, b.fX) && RoughlyEqualUlps(a.fY, b.fY); |
+ } |
+ |
+ bool approximatelyPEqual(const SkDPoint& a) const { |
+ if (approximately_equal(fX, a.fX) && approximately_equal(fY, a.fY)) { |
+ return true; |
+ } |
+ if (!RoughlyEqualUlps(fX, a.fX) || !RoughlyEqualUlps(fY, a.fY)) { |
+ return false; |
+ } |
+ double dist = distance(a); // OPTIMIZATION: can we compare against distSq instead ? |
+ double tiniest = SkTMin(SkTMin(SkTMin(fX, a.fX), fY), a.fY); |
+ double largest = SkTMax(SkTMax(SkTMax(fX, a.fX), fY), a.fY); |
+ largest = SkTMax(largest, -tiniest); |
+ return AlmostPequalUlps(largest, largest + dist); // is the dist within ULPS tolerance? |
+ } |
+ |
+ bool approximatelyDEqual(const SkDPoint& a) const { |
+ if (approximately_equal(fX, a.fX) && approximately_equal(fY, a.fY)) { |
+ return true; |
+ } |
+ if (!RoughlyEqualUlps(fX, a.fX) || !RoughlyEqualUlps(fY, a.fY)) { |
+ return false; |
+ } |
+ double dist = distance(a); // OPTIMIZATION: can we compare against distSq instead ? |
+ double tiniest = SkTMin(SkTMin(SkTMin(fX, a.fX), fY), a.fY); |
+ double largest = SkTMax(SkTMax(SkTMax(fX, a.fX), fY), a.fY); |
+ largest = SkTMax(largest, -tiniest); |
+ return AlmostDequalUlps(largest, largest + dist); // is the dist within ULPS tolerance? |
+ } |
+ |
bool approximatelyZero() const { |
return approximately_zero(fX) && approximately_zero(fY); |
} |
@@ -182,15 +209,19 @@ |
return result; |
} |
+ bool moreRoughlyEqual(const SkDPoint& a) const { |
+ if (roughly_equal(fX, a.fX) && roughly_equal(fY, a.fY)) { |
+ return true; |
+ } |
+ double dist = distance(a); // OPTIMIZATION: can we compare against distSq instead ? |
+ double tiniest = SkTMin(SkTMin(SkTMin(fX, a.fX), fY), a.fY); |
+ double largest = SkTMax(SkTMax(SkTMax(fX, a.fX), fY), a.fY); |
+ largest = SkTMax(largest, -tiniest); |
+ return RoughlyEqualUlps(largest, largest + dist); // is the dist within ULPS tolerance? |
+ } |
+ |
bool roughlyEqual(const SkDPoint& a) const { |
- if (roughly_equal(fX, a.fX) && roughly_equal(fY, a.fY)) { |
- return true; |
- } |
- double dist = distance(a); // OPTIMIZATION: can we compare against distSq instead ? |
- double tiniest = SkTMin(SkTMin(SkTMin(fX, a.fX), fY), a.fY); |
- double largest = SkTMax(SkTMax(SkTMax(fX, a.fX), fY), a.fY); |
- largest = SkTMax(largest, -tiniest); |
- return RoughlyEqualUlps(largest, largest + dist); // is the dist within ULPS tolerance? |
+ return roughly_equal(a.fY, fY) && roughly_equal(a.fX, fX); |
} |
// utilities callable by the user from the debugger when the implementation code is linked in |