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 
reset(int width)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
assertValid(int y,int maxStep) const28     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 
dump() const41     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 
validate() const59     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