Index: src/pathops/SkPathOpsCommon.cpp |
diff --git a/src/pathops/SkPathOpsCommon.cpp b/src/pathops/SkPathOpsCommon.cpp |
index 9215cbc84a56fce5c9840d17a37260a775c48cb7..0fa5ce0c9202378ce59314070c0754303081506c 100644 |
--- a/src/pathops/SkPathOpsCommon.cpp |
+++ b/src/pathops/SkPathOpsCommon.cpp |
@@ -9,7 +9,7 @@ |
#include "SkPathWriter.h" |
#include "SkTSort.h" |
-static int contourRangeCheckY(const SkTDArray<SkOpContour*>& contourList, SkOpSegment** currentPtr, |
+static int contourRangeCheckY(const SkTArray<SkOpContour*, true>& contourList, SkOpSegment** currentPtr, |
int* indexPtr, int* endIndexPtr, double* bestHit, SkScalar* bestDx, |
bool* tryAgain, double* midPtr, bool opp) { |
const int index = *indexPtr; |
@@ -97,7 +97,7 @@ abortContours: |
return result; |
} |
-SkOpSegment* FindUndone(SkTDArray<SkOpContour*>& contourList, int* start, int* end) { |
+SkOpSegment* FindUndone(SkTArray<SkOpContour*, true>& contourList, int* start, int* end) { |
int contourCount = contourList.count(); |
SkOpSegment* result; |
for (int cIndex = 0; cIndex < contourCount; ++cIndex) { |
@@ -117,7 +117,7 @@ SkOpSegment* FindChase(SkTDArray<SkOpSpan*>& chase, int& tIndex, int& endIndex) |
const SkOpSpan& backPtr = span->fOther->span(span->fOtherIndex); |
SkOpSegment* segment = backPtr.fOther; |
tIndex = backPtr.fOtherIndex; |
- SkTDArray<SkOpAngle> angles; |
+ SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle, true> angles; |
int done = 0; |
if (segment->activeAngle(tIndex, &done, &angles)) { |
SkOpAngle* last = angles.end() - 1; |
@@ -133,7 +133,7 @@ SkOpSegment* FindChase(SkTDArray<SkOpSpan*>& chase, int& tIndex, int& endIndex) |
if (done == angles.count()) { |
continue; |
} |
- SkTDArray<SkOpAngle*> sorted; |
+ SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle*, true> sorted; |
bool sortable = SkOpSegment::SortAngles(angles, &sorted, |
SkOpSegment::kMayBeUnordered_SortAngleKind); |
int angleCount = sorted.count(); |
@@ -208,7 +208,7 @@ SkOpSegment* FindChase(SkTDArray<SkOpSpan*>& chase, int& tIndex, int& endIndex) |
} |
#if DEBUG_ACTIVE_SPANS || DEBUG_ACTIVE_SPANS_FIRST_ONLY |
-void DebugShowActiveSpans(SkTDArray<SkOpContour*>& contourList) { |
+void DebugShowActiveSpans(SkTArray<SkOpContour*, true>& contourList) { |
int index; |
for (index = 0; index < contourList.count(); ++ index) { |
contourList[index]->debugShowActiveSpans(); |
@@ -216,7 +216,7 @@ void DebugShowActiveSpans(SkTDArray<SkOpContour*>& contourList) { |
} |
#endif |
-static SkOpSegment* findSortableTop(const SkTDArray<SkOpContour*>& contourList, |
+static SkOpSegment* findSortableTop(const SkTArray<SkOpContour*, true>& contourList, |
int* index, int* endIndex, SkPoint* topLeft, bool* unsortable, |
bool* done, bool onlySortable) { |
SkOpSegment* result; |
@@ -253,7 +253,7 @@ static SkOpSegment* findSortableTop(const SkTDArray<SkOpContour*>& contourList, |
return result; |
} |
-static int rightAngleWinding(const SkTDArray<SkOpContour*>& contourList, |
+static int rightAngleWinding(const SkTArray<SkOpContour*, true>& contourList, |
SkOpSegment** current, int* index, int* endIndex, double* tHit, |
SkScalar* hitDx, bool* tryAgain, bool opp) { |
double test = 0.9; |
@@ -270,7 +270,7 @@ static int rightAngleWinding(const SkTDArray<SkOpContour*>& contourList, |
return contourWinding; |
} |
-static void skipVertical(const SkTDArray<SkOpContour*>& contourList, |
+static void skipVertical(const SkTArray<SkOpContour*, true>& contourList, |
SkOpSegment** current, int* index, int* endIndex) { |
if (!(*current)->isVertical(*index, *endIndex)) { |
return; |
@@ -288,7 +288,7 @@ static void skipVertical(const SkTDArray<SkOpContour*>& contourList, |
} |
} |
-SkOpSegment* FindSortableTop(const SkTDArray<SkOpContour*>& contourList, bool* firstContour, |
+SkOpSegment* FindSortableTop(const SkTArray<SkOpContour*, true>& contourList, bool* firstContour, |
int* indexPtr, int* endIndexPtr, SkPoint* topLeft, bool* unsortable, |
bool* done, bool binary) { |
SkOpSegment* current = findSortableTop(contourList, indexPtr, endIndexPtr, topLeft, unsortable, |
@@ -344,7 +344,7 @@ SkOpSegment* FindSortableTop(const SkTDArray<SkOpContour*>& contourList, bool* f |
return current; |
} |
-void FixOtherTIndex(SkTDArray<SkOpContour*>* contourList) { |
+void FixOtherTIndex(SkTArray<SkOpContour*, true>* contourList) { |
int contourCount = (*contourList).count(); |
for (int cTest = 0; cTest < contourCount; ++cTest) { |
SkOpContour* contour = (*contourList)[cTest]; |
@@ -352,7 +352,7 @@ void FixOtherTIndex(SkTDArray<SkOpContour*>* contourList) { |
} |
} |
-void SortSegments(SkTDArray<SkOpContour*>* contourList) { |
+void SortSegments(SkTArray<SkOpContour*, true>* contourList) { |
int contourCount = (*contourList).count(); |
for (int cTest = 0; cTest < contourCount; ++cTest) { |
SkOpContour* contour = (*contourList)[cTest]; |
@@ -360,7 +360,7 @@ void SortSegments(SkTDArray<SkOpContour*>* contourList) { |
} |
} |
-void MakeContourList(SkTArray<SkOpContour>& contours, SkTDArray<SkOpContour*>& list, |
+void MakeContourList(SkTArray<SkOpContour>& contours, SkTArray<SkOpContour*, true>& list, |
bool evenOdd, bool oppEvenOdd) { |
int count = contours.count(); |
if (count == 0) { |
@@ -369,7 +369,7 @@ void MakeContourList(SkTArray<SkOpContour>& contours, SkTDArray<SkOpContour*>& l |
for (int index = 0; index < count; ++index) { |
SkOpContour& contour = contours[index]; |
contour.setOppXor(contour.operand() ? evenOdd : oppEvenOdd); |
- *list.append() = &contour; |
+ list.push_back(&contour); |
} |
SkTQSort<SkOpContour>(list.begin(), list.end() - 1); |
} |
@@ -403,7 +403,7 @@ void Assemble(const SkPathWriter& path, SkPathWriter* simple) { |
builder.finish(); |
int count = contours.count(); |
int outer; |
- SkTDArray<int> runs; // indices of partial contours |
+ SkTArray<int, true> runs(count); // indices of partial contours |
for (outer = 0; outer < count; ++outer) { |
const SkOpContour& eContour = contours[outer]; |
const SkPoint& eStart = eContour.start(); |
@@ -422,23 +422,23 @@ void Assemble(const SkPathWriter& path, SkPathWriter* simple) { |
eContour.toPath(simple); |
continue; |
} |
- *runs.append() = outer; |
+ runs.push_back(outer); |
} |
count = runs.count(); |
if (count == 0) { |
return; |
} |
- SkTDArray<int> sLink, eLink; |
- sLink.setCount(count); |
- eLink.setCount(count); |
+ SkTArray<int, true> sLink, eLink; |
+ sLink.push_back_n(count); |
+ eLink.push_back_n(count); |
int rIndex, iIndex; |
for (rIndex = 0; rIndex < count; ++rIndex) { |
sLink[rIndex] = eLink[rIndex] = SK_MaxS32; |
} |
- SkTDArray<double> distances; |
const int ends = count * 2; // all starts and ends |
const int entries = (ends - 1) * count; // folded triangle : n * (n - 1) / 2 |
- distances.setCount(entries); |
+ SkTArray<double, true> distances; |
+ distances.push_back_n(entries); |
for (rIndex = 0; rIndex < ends - 1; ++rIndex) { |
outer = runs[rIndex >> 1]; |
const SkOpContour& oContour = contours[outer]; |
@@ -455,8 +455,8 @@ void Assemble(const SkPathWriter& path, SkPathWriter* simple) { |
distances[row + iIndex] = dist; // oStart distance from iStart |
} |
} |
- SkTDArray<int> sortedDist; |
- sortedDist.setCount(entries); |
+ SkTArray<int, true> sortedDist; |
+ sortedDist.push_back_n(entries); |
for (rIndex = 0; rIndex < entries; ++rIndex) { |
sortedDist[rIndex] = rIndex; |
} |