PkmnLib/src/ScriptResolving/AngelScript/AngelscriptUserdata.hpp

37 lines
999 B
C++

#ifndef PKMNLIB_ANGELSCRIPTUSERDATA_HPP
#define PKMNLIB_ANGELSCRIPTUSERDATA_HPP
#include <Arbutils/Collections/Dictionary.hpp>
#include "AngelScriptResolver.hpp"
class AngelscriptUserdata {
AngelScriptResolver* _resolver;
ArbUt::Dictionary<ArbUt::StringView, asITypeInfo*> _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