Revert "remove pathop template"

This reverts commit 521f1ed0b677b86be291a7b4866ff84564dc3a1b.

Reason for revert: msan ubsan errors

Original change's description:
> remove pathop template
> 
> Pathops used templates for curve intersection.
> Since only one template is required if curves share
> an abstract base, remove the template altogether.
> 
> This makes the code easier to read, and incidentally
> makes it slightly smaller and much faster.
> 
> This also removes debugging code specific to templates,
> and removes Simplify code which isn't covered by tests
> or fuzz.
> 
> This shaves the execution time of
> pathops_unittest -V -x from 6m to 3m23s.
> 
> R=​kjlubick@google.com
> 
> Bug: skia:
> Change-Id: I00c08210e47efed83295276ae89ad64e7ec07ade
> Reviewed-on: https://skia-review.googlesource.com/c/162021
> Commit-Queue: Cary Clark <caryclark@google.com>
> Reviewed-by: Kevin Lubick <kjlubick@google.com>
> Reviewed-by: Cary Clark <caryclark@google.com>

TBR=kjlubick@google.com,caryclark@google.com,caryclark@skia.org

Change-Id: Ic5828f7affb7df96ed4ca79f037cdbcfaea24384
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/c/162643
Reviewed-by: Cary Clark <caryclark@google.com>
Commit-Queue: Cary Clark <caryclark@google.com>
diff --git a/src/pathops/SkPathOpsSimplify.cpp b/src/pathops/SkPathOpsSimplify.cpp
index 86b2c06..8e5f279 100644
--- a/src/pathops/SkPathOpsSimplify.cpp
+++ b/src/pathops/SkPathOpsSimplify.cpp
@@ -50,14 +50,18 @@
                 if (current->activeWinding(start, end) && !writer->isClosed()) {
                     SkOpSpan* spanStart = start->starter(end);
                     if (!spanStart->done()) {
-                        SkAssertResult(current->addCurveTo(start, end, writer));
+                        if (!current->addCurveTo(start, end, writer)) {
+                            return false;
+                        }
                         current->markDone(spanStart);
                     }
                 }
                 writer->finishContour();
             } else {
                 SkOpSpanBase* last;
-                SkAssertResult(current->markAndChaseDone(start, end, &last));
+                if (!current->markAndChaseDone(start, end, &last)) {
+                    return false;
+                }
                 if (last && !last->chased()) {
                     last->setChased(true);
                     SkASSERT(!SkPathOpsDebug::ChaseContains(chase, last));
@@ -120,12 +124,15 @@
             start = nextStart;
             end = nextEnd;
         } while (!writer->isClosed() && (!unsortable || !start->starter(end)->done()));
-#ifdef SK_DEBUG
         if (!writer->isClosed()) {
             SkOpSpan* spanStart = start->starter(end);
-            SkASSERT(spanStart->done());
+            if (!spanStart->done()) {
+                if (!current->addCurveTo(start, end, writer)) {
+                    return false;
+                }
+                current->markDone(spanStart);
+            }
         }
-#endif
         writer->finishContour();
         SkPathOpsDebug::ShowActiveSpans(contourList);
     } while (true);