1 2 /* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #include "SkAntiRun.h" 11 #include "SkUtils.h" 12 13 void SkAlphaRuns::reset(int width) { 14 SkASSERT(width > 0); 15 16 #ifdef SK_DEBUG 17 sk_memset16((uint16_t*)fRuns, (uint16_t)(-42), width); 18 #endif 19 fRuns[0] = SkToS16(width); 20 fRuns[width] = 0; 21 fAlpha[0] = 0; 22 23 SkDEBUGCODE(fWidth = width;) 24 SkDEBUGCODE(this->validate();) 25 } 26 27 #ifdef SK_DEBUG 28 void SkAlphaRuns::assertValid(int y, int maxStep) const { 29 int max = (y + 1) * maxStep - (y == maxStep - 1); 30 31 const int16_t* runs = fRuns; 32 const uint8_t* alpha = fAlpha; 33 34 while (*runs) { 35 SkASSERT(*alpha <= max); 36 alpha += *runs; 37 runs += *runs; 38 } 39 } 40 41 void SkAlphaRuns::dump() const { 42 const int16_t* runs = fRuns; 43 const uint8_t* alpha = fAlpha; 44 45 SkDebugf("Runs"); 46 while (*runs) { 47 int n = *runs; 48 49 SkDebugf(" %02x", *alpha); 50 if (n > 1) { 51 SkDebugf(",%d", n); 52 } 53 alpha += n; 54 runs += n; 55 } 56 SkDebugf("\n"); 57 } 58 59 void SkAlphaRuns::validate() const { 60 SkASSERT(fWidth > 0); 61 62 int count = 0; 63 const int16_t* runs = fRuns; 64 65 while (*runs) { 66 SkASSERT(*runs > 0); 67 count += *runs; 68 SkASSERT(count <= fWidth); 69 runs += *runs; 70 } 71 SkASSERT(count == fWidth); 72 } 73 #endif 74