Home | History | Annotate | Download | only in core
      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 
     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
     28     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 
     41     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 
     59     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