| /* | |
| * Copyright 2006 The Android Open Source Project | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "SkAntiRun.h" | |
| #include "SkUtils.h" | |
| void SkAlphaRuns::reset(int width) { | |
| SkASSERT(width > 0); | |
| #ifdef SK_DEBUG | |
| sk_memset16((uint16_t*)fRuns, (uint16_t)(-42), width); | |
| #endif | |
| fRuns[0] = SkToS16(width); | |
| fRuns[width] = 0; | |
| fAlpha[0] = 0; | |
| SkDEBUGCODE(fWidth = width;) | |
| SkDEBUGCODE(this->validate();) | |
| } | |
| #ifdef SK_DEBUG | |
| void SkAlphaRuns::assertValid(int y, int maxStep) const { | |
| int max = (y + 1) * maxStep - (y == maxStep - 1); | |
| const int16_t* runs = fRuns; | |
| const uint8_t* alpha = fAlpha; | |
| while (*runs) { | |
| SkASSERT(*alpha <= max); | |
| alpha += *runs; | |
| runs += *runs; | |
| } | |
| } | |
| void SkAlphaRuns::dump() const { | |
| const int16_t* runs = fRuns; | |
| const uint8_t* alpha = fAlpha; | |
| SkDebugf("Runs"); | |
| while (*runs) { | |
| int n = *runs; | |
| SkDebugf(" %02x", *alpha); | |
| if (n > 1) { | |
| SkDebugf(",%d", n); | |
| } | |
| alpha += n; | |
| runs += n; | |
| } | |
| SkDebugf("\n"); | |
| } | |
| void SkAlphaRuns::validate() const { | |
| SkASSERT(fWidth > 0); | |
| int count = 0; | |
| const int16_t* runs = fRuns; | |
| while (*runs) { | |
| SkASSERT(*runs > 0); | |
| count += *runs; | |
| SkASSERT(count <= fWidth); | |
| runs += *runs; | |
| } | |
| SkASSERT(count == fWidth); | |
| } | |
| #endif |