/* * 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 "SkTo.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