#ifndef PKMNLIB_ANGELSCRIPTUSERDATA_HPP #define PKMNLIB_ANGELSCRIPTUSERDATA_HPP #include #include "AngelScriptResolver.hpp" class AngelscriptUserdata { AngelScriptResolver* _resolver; ArbUt::Dictionary _cachedTypes; public: AngelscriptUserdata(AngelScriptResolver* r) : _resolver(r) {} ~AngelscriptUserdata() { for (auto& t : _cachedTypes) { t.second->Release(); } } asITypeInfo* GetType(const ArbUt::StringView& name) { auto v = _cachedTypes.TryGet(name); if (v.has_value()) { return v.value(); } auto t = _resolver->GetBaseType(name); t->AddRef(); _cachedTypes.Set(name, t); return t; } CScriptArray* CreateArray(const ArbUt::StringView& name, size_t length) { auto t = GetType(name); return CScriptArray::Create(t, length); } }; #endif // PKMNLIB_ANGELSCRIPTUSERDATA_HPP