/*
|
* 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
|