/*
 * Copyright (c) 2016-2019 ARM Limited.
 *
 * SPDX-License-Identifier: MIT
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
#ifndef __ARM_COMPUTE_PIXELVALUE_H__
#define __ARM_COMPUTE_PIXELVALUE_H__

#include "arm_compute/core/Types.h"

#include <cstdint>

namespace arm_compute
{
/** Class describing the value of a pixel for any image format. */
class PixelValue
{
public:
    /** Default constructor: value initialized to 0 */
    PixelValue()
        : value{ uint64_t(0) }
    {
    }
    /** Initialize the union with a pixel value of chosen datatype
     *
     * @param[in] v        int value.
     * @param[in] datatype DataType that @p v have to be stored
     * @param[in] qinfo    (Optional) QuantizationInfo to apply in case of quantized data types to @p v
     */
    PixelValue(uint64_t v, DataType datatype, QuantizationInfo qinfo = QuantizationInfo())
        : PixelValue()
    {
        switch(datatype)
        {
            case DataType::U8:
                value.u8 = static_cast<uint8_t>(v);
                break;
            case DataType::S8:
                value.s8 = static_cast<int8_t>(v);
                break;
            case DataType::QASYMM8:
                value.u8 = quantize_qasymm8(static_cast<uint8_t>(v), qinfo);
                break;
            case DataType::QSYMM8:
                value.s8 = quantize_qsymm8(static_cast<int8_t>(v), qinfo);
                break;
            case DataType::U16:
                value.u16 = static_cast<uint16_t>(v);
                break;
            case DataType::S16:
                value.s16 = static_cast<int16_t>(v);
                break;
            case DataType::QASYMM16:
                value.u16 = quantize_qasymm16(static_cast<uint16_t>(v), qinfo);
                break;
            case DataType::QSYMM16:
                value.s16 = quantize_qsymm16(static_cast<int16_t>(v), qinfo);
                break;
            case DataType::U32:
                value.u32 = static_cast<uint32_t>(v);
                break;
            case DataType::S32:
                value.s32 = static_cast<int32_t>(v);
                break;
            case DataType::U64:
                value.u64 = static_cast<uint64_t>(v);
                break;
            case DataType::S64:
                value.s16 = static_cast<int64_t>(v);
                break;
            case DataType::F16:
                value.f16 = static_cast<half>(v);
                break;
            case DataType::F32:
                value.f32 = static_cast<float>(v);
                break;
            case DataType::F64:
                value.f64 = static_cast<double>(v);
                break;
            default:
                value.u64 = v;
                break;
        }
    }
    /** Initialize the union with a U8 pixel value
     *
     * @param[in] v U8 value.
     */
    PixelValue(uint8_t v)
        : PixelValue()
    {
        value.u8 = v;
    }
    /** Initialize the union with a U16 pixel value
     *
     * @param[in] v U16 value.
     */
    PixelValue(uint16_t v)
        : PixelValue()
    {
        value.u16 = v;
    }
    /** Initialize the union with a S16 pixel value
     *
     * @param[in] v S16 value.
     */
    PixelValue(int16_t v)
        : PixelValue()
    {
        value.s16 = v;
    }
    /** Initialize the union with a U32 pixel value
     *
     * @param[in] v U32 value.
     */
    PixelValue(uint32_t v)
        : PixelValue()
    {
        value.u32 = v;
    }
    /** Initialize the union with a S32 pixel value
     *
     * @param[in] v S32 value.
     */
    PixelValue(int32_t v)
        : PixelValue()
    {
        value.s32 = v;
    }

    /** Initialize the union with a U64 pixel value
     *
     * @param[in] v U64 value.
     */
    PixelValue(uint64_t v)
        : PixelValue()
    {
        value.u64 = v;
    }
    /** Initialize the union with a S64 pixel value
     *
     * @param[in] v S64 value.
     */
    PixelValue(int64_t v)
        : PixelValue()
    {
        value.s64 = v;
    }
    /** Initialize the union with a F16 pixel value
     *
     * @param[in] v F16 value.
     */
    PixelValue(half v)
        : PixelValue()
    {
        value.f16 = v;
    }
    /** Initialize the union with a F32 pixel value
     *
     * @param[in] v F32 value.
     */
    PixelValue(float v)
        : PixelValue()
    {
        value.f32 = v;
    }
    /** Initialize the union with a F64 pixel value
     *
     * @param[in] v F64 value.
     */
    PixelValue(double v)
        : PixelValue()
    {
        value.f64 = v;
    }
    /** Union which describes the value of a pixel for any image format.
     * Use the field corresponding to the image format
     */
    union
        {
            uint64_t u64;     /**< Single channel U64 */
            int64_t  s64;     /**< Single channel S64 */
            uint8_t  rgb[3];  /**< 3 channels: RGB888 */
            uint8_t  yuv[3];  /**< 3 channels: Any YUV format */
            uint8_t  rgbx[4]; /**< 4 channels: RGBX8888 */
            double   f64;     /**< Single channel double */
            float    f32;     /**< Single channel float 32 */
            half     f16;     /**< Single channel F16 */
            uint8_t  u8;      /**< Single channel U8 */
            int8_t   s8;      /**< Single channel S8 */
            uint16_t u16;     /**< Single channel U16 */
            int16_t  s16;     /**< Single channel S16 */
            uint32_t u32;     /**< Single channel U32 */
            int32_t  s32;     /**< Single channel S32 */
        } value;
    /** Interpret the pixel value as a U8
     *
     * @param[out] v Returned value
     */
    void get(uint8_t &v) const
    {
        v = value.u8;
    }
    /** Interpret the pixel value as a S8
     *
     * @param[out] v Returned value
     */
    void get(int8_t &v) const
    {
        v = value.s8;
    }
    /** Interpret the pixel value as a U16
     *
     * @param[out] v Returned value
     */
    void get(uint16_t &v) const
    {
        v = value.u16;
    }
    /** Interpret the pixel value as a S16
     *
     * @param[out] v Returned value
     */
    void get(int16_t &v) const
    {
        v = value.s16;
    }
    /** Interpret the pixel value as a U32
     *
     * @param[out] v Returned value
     */
    void get(uint32_t &v) const
    {
        v = value.u32;
    }
    /** Interpret the pixel value as a S32
     *
     * @param[out] v Returned value
     */
    void get(int32_t &v) const
    {
        v = value.s32;
    }
    /** Interpret the pixel value as a U64
     *
     * @param[out] v Returned value
     */
    void get(uint64_t &v) const
    {
        v = value.u64;
    }
    /** Interpret the pixel value as a S64
     *
     * @param[out] v Returned value
     */
    void get(int64_t &v) const
    {
        v = value.s64;
    }
    /** Interpret the pixel value as a F16
     *
     * @param[out] v Returned value
     */
    void get(half &v) const
    {
        v = value.f16;
    }
    /** Interpret the pixel value as a F32
     *
     * @param[out] v Returned value
     */
    void get(float &v) const
    {
        v = value.f32;
    }
    /** Interpret the pixel value as a double
     *
     * @param[out] v Returned value
     */
    void get(double &v) const
    {
        v = value.f64;
    }
    /** Get the pixel value
     *
     * @return Pixel value
     */
    template <typename T>
    T get() const
    {
        T val;
        get(val);
        return val;
    }
};
}
#endif /* __ARM_COMPUTE_PIXELVALUE_H__ */
