Home | History | Annotate | Download | only in core
      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 
      9 #include "SkAntiRun.h"
     10 #include "SkUtils.h"
     11 
     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
     27     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 
     40     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 
     58     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