Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Side by Side Diff: src/pathops/SkPathOpsCommon.cpp

Issue 16951017: convert pathops to use SkSTArray where possible. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: pathops use SkTArray Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/pathops/SkPathOpsCommon.h ('k') | src/pathops/SkPathOpsCubic.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 #include "SkOpEdgeBuilder.h" 7 #include "SkOpEdgeBuilder.h"
8 #include "SkPathOpsCommon.h" 8 #include "SkPathOpsCommon.h"
9 #include "SkPathWriter.h" 9 #include "SkPathWriter.h"
10 #include "SkTSort.h" 10 #include "SkTSort.h"
11 11
12 static int contourRangeCheckY(const SkTDArray<SkOpContour*>& contourList, SkOpSe gment** currentPtr, 12 static int contourRangeCheckY(const SkTArray<SkOpContour*, true>& contourList, S kOpSegment** currentPtr,
13 int* indexPtr, int* endIndexPtr, double* bestHit, SkScalar* bestDx, 13 int* indexPtr, int* endIndexPtr, double* bestHit, SkScalar* bestDx,
14 bool* tryAgain, double* midPtr, bool opp) { 14 bool* tryAgain, double* midPtr, bool opp) {
15 const int index = *indexPtr; 15 const int index = *indexPtr;
16 const int endIndex = *endIndexPtr; 16 const int endIndex = *endIndexPtr;
17 const double mid = *midPtr; 17 const double mid = *midPtr;
18 const SkOpSegment* current = *currentPtr; 18 const SkOpSegment* current = *currentPtr;
19 double tAtMid = current->tAtMid(index, endIndex, mid); 19 double tAtMid = current->tAtMid(index, endIndex, mid);
20 SkPoint basePt = current->xyAtT(tAtMid); 20 SkPoint basePt = current->xyAtT(tAtMid);
21 int contourCount = contourList.count(); 21 int contourCount = contourList.count();
22 SkScalar bestY = SK_ScalarMin; 22 SkScalar bestY = SK_ScalarMin;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 } 90 }
91 result = bestSeg->windingAtT(*bestHit, bestTIndex, bestOpp, bestDx); 91 result = bestSeg->windingAtT(*bestHit, bestTIndex, bestOpp, bestDx);
92 SkASSERT(result == SK_MinS32 || *bestDx); 92 SkASSERT(result == SK_MinS32 || *bestDx);
93 } 93 }
94 double baseT = current->t(index); 94 double baseT = current->t(index);
95 double endT = current->t(endIndex); 95 double endT = current->t(endIndex);
96 *bestHit = baseT + mid * (endT - baseT); 96 *bestHit = baseT + mid * (endT - baseT);
97 return result; 97 return result;
98 } 98 }
99 99
100 SkOpSegment* FindUndone(SkTDArray<SkOpContour*>& contourList, int* start, int* e nd) { 100 SkOpSegment* FindUndone(SkTArray<SkOpContour*, true>& contourList, int* start, i nt* end) {
101 int contourCount = contourList.count(); 101 int contourCount = contourList.count();
102 SkOpSegment* result; 102 SkOpSegment* result;
103 for (int cIndex = 0; cIndex < contourCount; ++cIndex) { 103 for (int cIndex = 0; cIndex < contourCount; ++cIndex) {
104 SkOpContour* contour = contourList[cIndex]; 104 SkOpContour* contour = contourList[cIndex];
105 result = contour->undoneSegment(start, end); 105 result = contour->undoneSegment(start, end);
106 if (result) { 106 if (result) {
107 return result; 107 return result;
108 } 108 }
109 } 109 }
110 return NULL; 110 return NULL;
111 } 111 }
112 112
113 SkOpSegment* FindChase(SkTDArray<SkOpSpan*>& chase, int& tIndex, int& endIndex) { 113 SkOpSegment* FindChase(SkTDArray<SkOpSpan*>& chase, int& tIndex, int& endIndex) {
114 while (chase.count()) { 114 while (chase.count()) {
115 SkOpSpan* span; 115 SkOpSpan* span;
116 chase.pop(&span); 116 chase.pop(&span);
117 const SkOpSpan& backPtr = span->fOther->span(span->fOtherIndex); 117 const SkOpSpan& backPtr = span->fOther->span(span->fOtherIndex);
118 SkOpSegment* segment = backPtr.fOther; 118 SkOpSegment* segment = backPtr.fOther;
119 tIndex = backPtr.fOtherIndex; 119 tIndex = backPtr.fOtherIndex;
120 SkTDArray<SkOpAngle> angles; 120 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle, true> angles;
121 int done = 0; 121 int done = 0;
122 if (segment->activeAngle(tIndex, &done, &angles)) { 122 if (segment->activeAngle(tIndex, &done, &angles)) {
123 SkOpAngle* last = angles.end() - 1; 123 SkOpAngle* last = angles.end() - 1;
124 tIndex = last->start(); 124 tIndex = last->start();
125 endIndex = last->end(); 125 endIndex = last->end();
126 #if TRY_ROTATE 126 #if TRY_ROTATE
127 *chase.insert(0) = span; 127 *chase.insert(0) = span;
128 #else 128 #else
129 *chase.append() = span; 129 *chase.append() = span;
130 #endif 130 #endif
131 return last->segment(); 131 return last->segment();
132 } 132 }
133 if (done == angles.count()) { 133 if (done == angles.count()) {
134 continue; 134 continue;
135 } 135 }
136 SkTDArray<SkOpAngle*> sorted; 136 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle*, true> sorted;
137 bool sortable = SkOpSegment::SortAngles(angles, &sorted, 137 bool sortable = SkOpSegment::SortAngles(angles, &sorted,
138 SkOpSegment::kMayBeUnordered_SortAngleKind); 138 SkOpSegment::kMayBeUnordered_SortAngleKind);
139 int angleCount = sorted.count(); 139 int angleCount = sorted.count();
140 #if DEBUG_SORT 140 #if DEBUG_SORT
141 sorted[0]->segment()->debugShowSort(__FUNCTION__, sorted, 0, 0, 0); 141 sorted[0]->segment()->debugShowSort(__FUNCTION__, sorted, 0, 0, 0);
142 #endif 142 #endif
143 if (!sortable) { 143 if (!sortable) {
144 continue; 144 continue;
145 } 145 }
146 // find first angle, initialize winding to computed fWindSum 146 // find first angle, initialize winding to computed fWindSum
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 break; 201 break;
202 } 202 }
203 } while (++nextIndex != lastIndex); 203 } while (++nextIndex != lastIndex);
204 *chase.insert(0) = span; 204 *chase.insert(0) = span;
205 return segment; 205 return segment;
206 } 206 }
207 return NULL; 207 return NULL;
208 } 208 }
209 209
210 #if DEBUG_ACTIVE_SPANS || DEBUG_ACTIVE_SPANS_FIRST_ONLY 210 #if DEBUG_ACTIVE_SPANS || DEBUG_ACTIVE_SPANS_FIRST_ONLY
211 void DebugShowActiveSpans(SkTDArray<SkOpContour*>& contourList) { 211 void DebugShowActiveSpans(SkTArray<SkOpContour*, true>& contourList) {
212 int index; 212 int index;
213 for (index = 0; index < contourList.count(); ++ index) { 213 for (index = 0; index < contourList.count(); ++ index) {
214 contourList[index]->debugShowActiveSpans(); 214 contourList[index]->debugShowActiveSpans();
215 } 215 }
216 } 216 }
217 #endif 217 #endif
218 218
219 static SkOpSegment* findSortableTop(const SkTDArray<SkOpContour*>& contourList, 219 static SkOpSegment* findSortableTop(const SkTArray<SkOpContour*, true>& contourL ist,
220 int* index, int* endIndex, SkPoint* topLeft, bool* unsortable, 220 int* index, int* endIndex, SkPoint* topLeft, bool* unsortable,
221 bool* done, bool onlySortable) { 221 bool* done, bool onlySortable) {
222 SkOpSegment* result; 222 SkOpSegment* result;
223 do { 223 do {
224 SkPoint bestXY = {SK_ScalarMax, SK_ScalarMax}; 224 SkPoint bestXY = {SK_ScalarMax, SK_ScalarMax};
225 int contourCount = contourList.count(); 225 int contourCount = contourList.count();
226 SkOpSegment* topStart = NULL; 226 SkOpSegment* topStart = NULL;
227 *done = true; 227 *done = true;
228 for (int cIndex = 0; cIndex < contourCount; ++cIndex) { 228 for (int cIndex = 0; cIndex < contourCount; ++cIndex) {
229 SkOpContour* contour = contourList[cIndex]; 229 SkOpContour* contour = contourList[cIndex];
(...skipping 16 matching lines...) Expand all
246 } 246 }
247 if (!topStart) { 247 if (!topStart) {
248 return NULL; 248 return NULL;
249 } 249 }
250 *topLeft = bestXY; 250 *topLeft = bestXY;
251 result = topStart->findTop(index, endIndex, unsortable, onlySortable); 251 result = topStart->findTop(index, endIndex, unsortable, onlySortable);
252 } while (!result); 252 } while (!result);
253 return result; 253 return result;
254 } 254 }
255 255
256 static int rightAngleWinding(const SkTDArray<SkOpContour*>& contourList, 256 static int rightAngleWinding(const SkTArray<SkOpContour*, true>& contourList,
257 SkOpSegment** current, int* index, int* endIndex, d ouble* tHit, 257 SkOpSegment** current, int* index, int* endIndex, d ouble* tHit,
258 SkScalar* hitDx, bool* tryAgain, bool opp) { 258 SkScalar* hitDx, bool* tryAgain, bool opp) {
259 double test = 0.9; 259 double test = 0.9;
260 int contourWinding; 260 int contourWinding;
261 do { 261 do {
262 contourWinding = contourRangeCheckY(contourList, current, index, endInde x, tHit, hitDx, 262 contourWinding = contourRangeCheckY(contourList, current, index, endInde x, tHit, hitDx,
263 tryAgain, &test, opp); 263 tryAgain, &test, opp);
264 if (contourWinding != SK_MinS32 || *tryAgain) { 264 if (contourWinding != SK_MinS32 || *tryAgain) {
265 return contourWinding; 265 return contourWinding;
266 } 266 }
267 test /= 2; 267 test /= 2;
268 } while (!approximately_negative(test)); 268 } while (!approximately_negative(test));
269 SkASSERT(0); // should be OK to comment out, but interested when this hits 269 SkASSERT(0); // should be OK to comment out, but interested when this hits
270 return contourWinding; 270 return contourWinding;
271 } 271 }
272 272
273 static void skipVertical(const SkTDArray<SkOpContour*>& contourList, 273 static void skipVertical(const SkTArray<SkOpContour*, true>& contourList,
274 SkOpSegment** current, int* index, int* endIndex) { 274 SkOpSegment** current, int* index, int* endIndex) {
275 if (!(*current)->isVertical(*index, *endIndex)) { 275 if (!(*current)->isVertical(*index, *endIndex)) {
276 return; 276 return;
277 } 277 }
278 int contourCount = contourList.count(); 278 int contourCount = contourList.count();
279 for (int cIndex = 0; cIndex < contourCount; ++cIndex) { 279 for (int cIndex = 0; cIndex < contourCount; ++cIndex) {
280 SkOpContour* contour = contourList[cIndex]; 280 SkOpContour* contour = contourList[cIndex];
281 if (contour->done()) { 281 if (contour->done()) {
282 continue; 282 continue;
283 } 283 }
284 *current = contour->nonVerticalSegment(index, endIndex); 284 *current = contour->nonVerticalSegment(index, endIndex);
285 if (*current) { 285 if (*current) {
286 return; 286 return;
287 } 287 }
288 } 288 }
289 } 289 }
290 290
291 SkOpSegment* FindSortableTop(const SkTDArray<SkOpContour*>& contourList, bool* f irstContour, 291 SkOpSegment* FindSortableTop(const SkTArray<SkOpContour*, true>& contourList, bo ol* firstContour,
292 int* indexPtr, int* endIndexPtr, SkPoint* topLeft, bool* unsortable, 292 int* indexPtr, int* endIndexPtr, SkPoint* topLeft, bool* unsortable,
293 bool* done, bool binary) { 293 bool* done, bool binary) {
294 SkOpSegment* current = findSortableTop(contourList, indexPtr, endIndexPtr, t opLeft, unsortable, 294 SkOpSegment* current = findSortableTop(contourList, indexPtr, endIndexPtr, t opLeft, unsortable,
295 done, true); 295 done, true);
296 if (!current) { 296 if (!current) {
297 return NULL; 297 return NULL;
298 } 298 }
299 const int index = *indexPtr; 299 const int index = *indexPtr;
300 const int endIndex = *endIndexPtr; 300 const int endIndex = *endIndexPtr;
301 if (*firstContour) { 301 if (*firstContour) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 break; 337 break;
338 } 338 }
339 oppContourWinding = rightAngleWinding(contourList, &current, indexPtr, e ndIndexPtr, &tHit, 339 oppContourWinding = rightAngleWinding(contourList, &current, indexPtr, e ndIndexPtr, &tHit,
340 &hitOppDx, &tryAgain, true); 340 &hitOppDx, &tryAgain, true);
341 } while (tryAgain); 341 } while (tryAgain);
342 current->initWinding(*indexPtr, *endIndexPtr, tHit, contourWinding, hitDx, o ppContourWinding, 342 current->initWinding(*indexPtr, *endIndexPtr, tHit, contourWinding, hitDx, o ppContourWinding,
343 hitOppDx); 343 hitOppDx);
344 return current; 344 return current;
345 } 345 }
346 346
347 void FixOtherTIndex(SkTDArray<SkOpContour*>* contourList) { 347 void FixOtherTIndex(SkTArray<SkOpContour*, true>* contourList) {
348 int contourCount = (*contourList).count(); 348 int contourCount = (*contourList).count();
349 for (int cTest = 0; cTest < contourCount; ++cTest) { 349 for (int cTest = 0; cTest < contourCount; ++cTest) {
350 SkOpContour* contour = (*contourList)[cTest]; 350 SkOpContour* contour = (*contourList)[cTest];
351 contour->fixOtherTIndex(); 351 contour->fixOtherTIndex();
352 } 352 }
353 } 353 }
354 354
355 void SortSegments(SkTDArray<SkOpContour*>* contourList) { 355 void SortSegments(SkTArray<SkOpContour*, true>* contourList) {
356 int contourCount = (*contourList).count(); 356 int contourCount = (*contourList).count();
357 for (int cTest = 0; cTest < contourCount; ++cTest) { 357 for (int cTest = 0; cTest < contourCount; ++cTest) {
358 SkOpContour* contour = (*contourList)[cTest]; 358 SkOpContour* contour = (*contourList)[cTest];
359 contour->sortSegments(); 359 contour->sortSegments();
360 } 360 }
361 } 361 }
362 362
363 void MakeContourList(SkTArray<SkOpContour>& contours, SkTDArray<SkOpContour*>& l ist, 363 void MakeContourList(SkTArray<SkOpContour>& contours, SkTArray<SkOpContour*, tru e>& list,
364 bool evenOdd, bool oppEvenOdd) { 364 bool evenOdd, bool oppEvenOdd) {
365 int count = contours.count(); 365 int count = contours.count();
366 if (count == 0) { 366 if (count == 0) {
367 return; 367 return;
368 } 368 }
369 for (int index = 0; index < count; ++index) { 369 for (int index = 0; index < count; ++index) {
370 SkOpContour& contour = contours[index]; 370 SkOpContour& contour = contours[index];
371 contour.setOppXor(contour.operand() ? evenOdd : oppEvenOdd); 371 contour.setOppXor(contour.operand() ? evenOdd : oppEvenOdd);
372 *list.append() = &contour; 372 list.push_back(&contour);
373 } 373 }
374 SkTQSort<SkOpContour>(list.begin(), list.end() - 1); 374 SkTQSort<SkOpContour>(list.begin(), list.end() - 1);
375 } 375 }
376 376
377 static bool approximatelyEqual(const SkPoint& a, const SkPoint& b) { 377 static bool approximatelyEqual(const SkPoint& a, const SkPoint& b) {
378 return AlmostEqualUlps(a.fX, b.fX) && AlmostEqualUlps(a.fY, b.fY); 378 return AlmostEqualUlps(a.fX, b.fX) && AlmostEqualUlps(a.fY, b.fY);
379 } 379 }
380 380
381 class DistanceLessThan { 381 class DistanceLessThan {
382 public: 382 public:
(...skipping 13 matching lines...) Expand all
396 */ 396 */
397 void Assemble(const SkPathWriter& path, SkPathWriter* simple) { 397 void Assemble(const SkPathWriter& path, SkPathWriter* simple) {
398 #if DEBUG_PATH_CONSTRUCTION 398 #if DEBUG_PATH_CONSTRUCTION
399 SkDebugf("%s\n", __FUNCTION__); 399 SkDebugf("%s\n", __FUNCTION__);
400 #endif 400 #endif
401 SkTArray<SkOpContour> contours; 401 SkTArray<SkOpContour> contours;
402 SkOpEdgeBuilder builder(path, contours); 402 SkOpEdgeBuilder builder(path, contours);
403 builder.finish(); 403 builder.finish();
404 int count = contours.count(); 404 int count = contours.count();
405 int outer; 405 int outer;
406 SkTDArray<int> runs; // indices of partial contours 406 SkTArray<int, true> runs(count); // indices of partial contours
407 for (outer = 0; outer < count; ++outer) { 407 for (outer = 0; outer < count; ++outer) {
408 const SkOpContour& eContour = contours[outer]; 408 const SkOpContour& eContour = contours[outer];
409 const SkPoint& eStart = eContour.start(); 409 const SkPoint& eStart = eContour.start();
410 const SkPoint& eEnd = eContour.end(); 410 const SkPoint& eEnd = eContour.end();
411 #if DEBUG_ASSEMBLE 411 #if DEBUG_ASSEMBLE
412 SkDebugf("%s contour", __FUNCTION__); 412 SkDebugf("%s contour", __FUNCTION__);
413 if (!approximatelyEqual(eStart, eEnd)) { 413 if (!approximatelyEqual(eStart, eEnd)) {
414 SkDebugf("[%d]", runs.count()); 414 SkDebugf("[%d]", runs.count());
415 } else { 415 } else {
416 SkDebugf(" "); 416 SkDebugf(" ");
417 } 417 }
418 SkDebugf(" start=(%1.9g,%1.9g) end=(%1.9g,%1.9g)\n", 418 SkDebugf(" start=(%1.9g,%1.9g) end=(%1.9g,%1.9g)\n",
419 eStart.fX, eStart.fY, eEnd.fX, eEnd.fY); 419 eStart.fX, eStart.fY, eEnd.fX, eEnd.fY);
420 #endif 420 #endif
421 if (approximatelyEqual(eStart, eEnd)) { 421 if (approximatelyEqual(eStart, eEnd)) {
422 eContour.toPath(simple); 422 eContour.toPath(simple);
423 continue; 423 continue;
424 } 424 }
425 *runs.append() = outer; 425 runs.push_back(outer);
426 } 426 }
427 count = runs.count(); 427 count = runs.count();
428 if (count == 0) { 428 if (count == 0) {
429 return; 429 return;
430 } 430 }
431 SkTDArray<int> sLink, eLink; 431 SkTArray<int, true> sLink, eLink;
432 sLink.setCount(count); 432 sLink.push_back_n(count);
433 eLink.setCount(count); 433 eLink.push_back_n(count);
434 int rIndex, iIndex; 434 int rIndex, iIndex;
435 for (rIndex = 0; rIndex < count; ++rIndex) { 435 for (rIndex = 0; rIndex < count; ++rIndex) {
436 sLink[rIndex] = eLink[rIndex] = SK_MaxS32; 436 sLink[rIndex] = eLink[rIndex] = SK_MaxS32;
437 } 437 }
438 SkTDArray<double> distances;
439 const int ends = count * 2; // all starts and ends 438 const int ends = count * 2; // all starts and ends
440 const int entries = (ends - 1) * count; // folded triangle : n * (n - 1) / 2 439 const int entries = (ends - 1) * count; // folded triangle : n * (n - 1) / 2
441 distances.setCount(entries); 440 SkTArray<double, true> distances;
441 distances.push_back_n(entries);
442 for (rIndex = 0; rIndex < ends - 1; ++rIndex) { 442 for (rIndex = 0; rIndex < ends - 1; ++rIndex) {
443 outer = runs[rIndex >> 1]; 443 outer = runs[rIndex >> 1];
444 const SkOpContour& oContour = contours[outer]; 444 const SkOpContour& oContour = contours[outer];
445 const SkPoint& oPt = rIndex & 1 ? oContour.end() : oContour.start(); 445 const SkPoint& oPt = rIndex & 1 ? oContour.end() : oContour.start();
446 const int row = rIndex < count - 1 ? rIndex * ends : (ends - rIndex - 2) 446 const int row = rIndex < count - 1 ? rIndex * ends : (ends - rIndex - 2)
447 * ends - rIndex - 1; 447 * ends - rIndex - 1;
448 for (iIndex = rIndex + 1; iIndex < ends; ++iIndex) { 448 for (iIndex = rIndex + 1; iIndex < ends; ++iIndex) {
449 int inner = runs[iIndex >> 1]; 449 int inner = runs[iIndex >> 1];
450 const SkOpContour& iContour = contours[inner]; 450 const SkOpContour& iContour = contours[inner];
451 const SkPoint& iPt = iIndex & 1 ? iContour.end() : iContour.start(); 451 const SkPoint& iPt = iIndex & 1 ? iContour.end() : iContour.start();
452 double dx = iPt.fX - oPt.fX; 452 double dx = iPt.fX - oPt.fX;
453 double dy = iPt.fY - oPt.fY; 453 double dy = iPt.fY - oPt.fY;
454 double dist = dx * dx + dy * dy; 454 double dist = dx * dx + dy * dy;
455 distances[row + iIndex] = dist; // oStart distance from iStart 455 distances[row + iIndex] = dist; // oStart distance from iStart
456 } 456 }
457 } 457 }
458 SkTDArray<int> sortedDist; 458 SkTArray<int, true> sortedDist;
459 sortedDist.setCount(entries); 459 sortedDist.push_back_n(entries);
460 for (rIndex = 0; rIndex < entries; ++rIndex) { 460 for (rIndex = 0; rIndex < entries; ++rIndex) {
461 sortedDist[rIndex] = rIndex; 461 sortedDist[rIndex] = rIndex;
462 } 462 }
463 SkTQSort<int>(sortedDist.begin(), sortedDist.end() - 1, DistanceLessThan(dis tances.begin())); 463 SkTQSort<int>(sortedDist.begin(), sortedDist.end() - 1, DistanceLessThan(dis tances.begin()));
464 int remaining = count; // number of start/end pairs 464 int remaining = count; // number of start/end pairs
465 for (rIndex = 0; rIndex < entries; ++rIndex) { 465 for (rIndex = 0; rIndex < entries; ++rIndex) {
466 int pair = sortedDist[rIndex]; 466 int pair = sortedDist[rIndex];
467 int row = pair / ends; 467 int row = pair / ends;
468 int col = pair - row * ends; 468 int col = pair - row * ends;
469 int thingOne = row < col ? row : ends - row - 2; 469 int thingOne = row < col ? row : ends - row - 2;
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 } 575 }
576 } 576 }
577 } while (rIndex < count); 577 } while (rIndex < count);
578 #if DEBUG_ASSEMBLE 578 #if DEBUG_ASSEMBLE
579 for (rIndex = 0; rIndex < count; ++rIndex) { 579 for (rIndex = 0; rIndex < count; ++rIndex) {
580 SkASSERT(sLink[rIndex] == SK_MaxS32); 580 SkASSERT(sLink[rIndex] == SK_MaxS32);
581 SkASSERT(eLink[rIndex] == SK_MaxS32); 581 SkASSERT(eLink[rIndex] == SK_MaxS32);
582 } 582 }
583 #endif 583 #endif
584 } 584 }
OLDNEW
« no previous file with comments | « src/pathops/SkPathOpsCommon.h ('k') | src/pathops/SkPathOpsCubic.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698