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

#ifndef SkottieAdapter_DEFINED
#define SkottieAdapter_DEFINED

#include "modules/skottie/src/Animator.h"

namespace skottie {
namespace internal {

template <typename AdapterT, typename T>
class DiscardableAdapterBase : public AnimatablePropertyContainer {
public:
    template <typename... Args>
    static sk_sp<AdapterT> Make(Args&&... args) {
        return sk_sp<AdapterT>(new AdapterT(std::forward<Args>(args)...));
    }

    const sk_sp<T>& node() const { return fNode; }

protected:
    DiscardableAdapterBase()
        : fNode(T::Make()) {}

    explicit DiscardableAdapterBase(sk_sp<T> node)
        : fNode(std::move(node)) {}

private:
    const sk_sp<T> fNode;
};

} // namespace internal
} // namespace skottie

#endif // SkottieAdapter_DEFINED
