/*
 * 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 "SkTypes.h"

/*
 *
 * Contains useful mask routines for SkMaskSwizzler
 *
 */
class SkMasks {
public:

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

    /*
     *
     * Contains all of the information for a single mask
     *
     */
     struct MaskInfo {
        uint32_t mask;
        uint32_t shift;
        uint32_t size;
     };

    /*
     *
     * 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:

    /*
     *
     * Constructor
     *
     */
    SkMasks(const MaskInfo& red, const MaskInfo& green, const MaskInfo& blue,
            const MaskInfo& alpha);

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

#endif
