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