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

#ifndef SkSGTransformPriv_DEFINED
#define SkSGTransformPriv_DEFINED

#include "include/core/SkM44.h"
#include "include/core/SkMatrix.h"
#include "modules/sksg/include/SkSGTransform.h"

namespace sksg {

// Helper for accessing implementation-private Transform methods.
class TransformPriv final {
public:

    static bool Is44(const sk_sp<Transform>&t) { return t->is44(); }

    template <typename T, typename = std::enable_if<std::is_same<T, SkMatrix>::value ||
                                                    std::is_same<T, SkM44   >::value >>
    static T As(const sk_sp<Transform>&);

private:
    TransformPriv() = delete;
};

template <>
inline SkMatrix TransformPriv::As<SkMatrix>(const sk_sp<Transform>& t) {
    return t->asMatrix();
}

template <>
inline SkM44 TransformPriv::As<SkM44>(const sk_sp<Transform>& t) {
    return t->asM44();
}

} // namespace sksg

#endif // SkSGTransformPriv_DEFINED
