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

Side by Side Diff: src/core/SkPathMeasure.cpp

Issue 15070011: One SkTSearch to rule them all. Allow key to be of different type than the array. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: fixes to compile on gcc Created 7 years, 7 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/core/SkBitmapHeap.cpp ('k') | src/core/SkPictureFlat.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 /* 2 /*
3 * Copyright 2008 The Android Open Source Project 3 * Copyright 2008 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "SkPathMeasure.h" 10 #include "SkPathMeasure.h"
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 } 382 }
383 383
384 const SkPathMeasure::Segment* SkPathMeasure::distanceToSegment( 384 const SkPathMeasure::Segment* SkPathMeasure::distanceToSegment(
385 SkScalar distance, SkScalar* t) { 385 SkScalar distance, SkScalar* t) {
386 SkDEBUGCODE(SkScalar length = ) this->getLength(); 386 SkDEBUGCODE(SkScalar length = ) this->getLength();
387 SkASSERT(distance >= 0 && distance <= length); 387 SkASSERT(distance >= 0 && distance <= length);
388 388
389 const Segment* seg = fSegments.begin(); 389 const Segment* seg = fSegments.begin();
390 int count = fSegments.count(); 390 int count = fSegments.count();
391 391
392 int index = SkTSearch<SkScalar>(&seg->fDistance, count, distance, 392 int index = SkTSearch<SkScalar>(&seg->fDistance, count, distance, sizeof(Seg ment));
393 sizeof(Segment));
394 // don't care if we hit an exact match or not, so we xor index if it is nega tive 393 // don't care if we hit an exact match or not, so we xor index if it is nega tive
395 index ^= (index >> 31); 394 index ^= (index >> 31);
396 seg = &seg[index]; 395 seg = &seg[index];
397 396
398 // now interpolate t-values with the prev segment (if possible) 397 // now interpolate t-values with the prev segment (if possible)
399 SkScalar startT = 0, startD = 0; 398 SkScalar startT = 0, startD = 0;
400 // check if the prev segment is legal, and references the same set of points 399 // check if the prev segment is legal, and references the same set of points
401 if (index > 0) { 400 if (index > 0) {
402 startD = seg[-1].fDistance; 401 startD = seg[-1].fDistance;
403 if (seg[-1].fPtIndex == seg->fPtIndex) { 402 if (seg[-1].fPtIndex == seg->fPtIndex) {
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 530
532 for (int i = 0; i < fSegments.count(); i++) { 531 for (int i = 0; i < fSegments.count(); i++) {
533 const Segment* seg = &fSegments[i]; 532 const Segment* seg = &fSegments[i];
534 SkDebugf("pathmeas: seg[%d] distance=%g, point=%d, t=%g, type=%d\n", 533 SkDebugf("pathmeas: seg[%d] distance=%g, point=%d, t=%g, type=%d\n",
535 i, seg->fDistance, seg->fPtIndex, seg->getScalarT(), 534 i, seg->fDistance, seg->fPtIndex, seg->getScalarT(),
536 seg->fType); 535 seg->fType);
537 } 536 }
538 } 537 }
539 538
540 #endif 539 #endif
OLDNEW
« no previous file with comments | « src/core/SkBitmapHeap.cpp ('k') | src/core/SkPictureFlat.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698