#pragma once

#include <cstdint>
#include <functional>
#include <memory>

namespace extra2d {

using int8 = std::int8_t;
using int16 = std::int16_t;
using int32 = std::int32_t;
using int64 = std::int64_t;
using uint8 = std::uint8_t;
using uint16 = std::uint16_t;
using uint32 = std::uint32_t;
using uint64 = std::uint64_t;

template <typename Sig> using Fn = std::function<Sig>;
template <typename T> using Unique = std::unique_ptr<T>;

template <typename T, typename... Args>
inline Unique<T> makeUnique(Args&&... args) {
    return std::make_unique<T>(std::forward<Args>(args)...);
}

} // namespace extra2d
