| Index: src/pathops/SkIntersections.cpp
|
| diff --git a/src/pathops/SkIntersections.cpp b/src/pathops/SkIntersections.cpp
|
| index 242c67b926e733c918b517cd2b609dd0c73c6a41..3a5e24f0a794e577a8e82f75ad982e69fb6cf95e 100644
|
| --- a/src/pathops/SkIntersections.cpp
|
| +++ b/src/pathops/SkIntersections.cpp
|
| @@ -93,8 +93,10 @@ int SkIntersections::insert(double one, double two, const SkDPoint& pt) {
|
| memmove(&fPt[index + 1], &fPt[index], sizeof(fPt[0]) * remaining);
|
| memmove(&fT[0][index + 1], &fT[0][index], sizeof(fT[0][0]) * remaining);
|
| memmove(&fT[1][index + 1], &fT[1][index], sizeof(fT[1][0]) * remaining);
|
| - fIsCoincident[0] += fIsCoincident[0] & ~((1 << index) - 1);
|
| - fIsCoincident[1] += fIsCoincident[1] & ~((1 << index) - 1);
|
| + int clearMask = ~((1 << index) - 1);
|
| + fIsCoincident[0] += fIsCoincident[0] & clearMask;
|
| + fIsCoincident[1] += fIsCoincident[1] & clearMask;
|
| + fIsNear += fIsNear & clearMask;
|
| }
|
| fPt[index] = pt;
|
| fT[0][index] = one;
|
| @@ -103,6 +105,14 @@ int SkIntersections::insert(double one, double two, const SkDPoint& pt) {
|
| return index;
|
| }
|
|
|
| +void SkIntersections::insertNear(double one, double two, const SkDPoint& pt) {
|
| + int index = insert(one, two, pt);
|
| + if (index < 0) {
|
| + return;
|
| + }
|
| + fIsNear |= 1 << index;
|
| +}
|
| +
|
| void SkIntersections::insertCoincident(double one, double two, const SkDPoint& pt) {
|
| int index = insertSwap(one, two, pt);
|
| int bit = 1 << index;
|
| @@ -158,6 +168,7 @@ void SkIntersections::removeOne(int index) {
|
| fIsCoincident[0] -= ((fIsCoincident[0] >> 1) & ~((1 << index) - 1)) + coBit;
|
| SkASSERT(!(coBit ^ (fIsCoincident[1] & (1 << index))));
|
| fIsCoincident[1] -= ((fIsCoincident[1] >> 1) & ~((1 << index) - 1)) + coBit;
|
| + fIsNear -= ((fIsNear >> 1) & ~((1 << index) - 1)) + (fIsNear & (1 << index));
|
| }
|
|
|
| void SkIntersections::swapPts() {
|
|
|