path ops work in progress

path ops work in progress

BUG=

Review URL: https://codereview.chromium.org/21359002

git-svn-id: http://skia.googlecode.com/svn/trunk@11291 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/pathops/SkIntersections.cpp b/src/pathops/SkIntersections.cpp
index 242c67b..3a5e24f 100644
--- a/src/pathops/SkIntersections.cpp
+++ b/src/pathops/SkIntersections.cpp
@@ -93,8 +93,10 @@
         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 @@
     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 @@
     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() {