//
// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

// copyimage.inl: Defines image copying functions

namespace angle
{

template <typename sourceType, typename colorDataType>
inline void ReadColor(const uint8_t *source, uint8_t *dest)
{
    sourceType::readColor(reinterpret_cast<Color<colorDataType>*>(dest),
                          reinterpret_cast<const sourceType*>(source));
}

template <typename destType, typename colorDataType>
inline void WriteColor(const uint8_t *source, uint8_t *dest)
{
    destType::writeColor(reinterpret_cast<destType*>(dest),
                         reinterpret_cast<const Color<colorDataType>*>(source));
}

template <typename sourceType, typename destType, typename colorDataType>
inline void CopyPixel(const uint8_t *source, uint8_t *dest)
{
    colorDataType temp;
    ReadColor<sourceType, colorDataType>(source, &temp);
    WriteColor<destType, colorDataType>(&temp, dest);
}

}  // namespace angle
