/*
 * Copyright 2015 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#ifndef SkMasks_DEFINED
#define SkMasks_DEFINED

#include "include/core/SkTypes.h"

// Contains useful mask routines for SkMaskSwizzler
class SkMasks {
public:
   //Contains all of the information for a single mask
    struct MaskInfo {
        uint32_t mask;
        uint32_t shift;  // To the left
        uint32_t size;   // Of mask width
    };

    constexpr SkMasks(const MaskInfo red, const MaskInfo green, const MaskInfo blue,
            const MaskInfo alpha)
        : fRed(red)
        , fGreen(green)
        , fBlue(blue)
        , fAlpha(alpha) { }

    //Input bit masks format
    struct InputMasks {
        uint32_t red;
        uint32_t green;
        uint32_t blue;
        uint32_t alpha;
    };

    // Create the masks object
    static SkMasks* CreateMasks(InputMasks masks, int bytesPerPixel);

    // Get a color component
    uint8_t getRed(uint32_t pixel) const;
    uint8_t getGreen(uint32_t pixel) const;
    uint8_t getBlue(uint32_t pixel) const;
    uint8_t getAlpha(uint32_t pixel) const;

     // Getter for the alpha mask
     // The alpha mask may be used in other decoding modes
     uint32_t getAlphaMask() const {
        return fAlpha.mask;
     }

private:
    const MaskInfo fRed;
    const MaskInfo fGreen;
    const MaskInfo fBlue;
    const MaskInfo fAlpha;
};

#endif
