Compare commits

...

2 Commits

Author SHA1 Message Date
6a52319156 [turbine] Cleanup applicationData
All checks were successful
Build / build (push) Successful in 2m38s
2024-03-17 20:59:14 -05:00
205f2a698c [turbine] Fix applicationData to properly return null 2024-03-17 20:05:01 -05:00

View File

@ -60,7 +60,7 @@ struct Wrap: public WrapBase {
class WrapPtr { class WrapPtr {
private: private:
WrapBase *m_wrapPtr{}; WrapBase *m_wrapPtr{};
ox::Array<char, sizeof(WrapBase) + sizeof(void*)> m_wrapData; ox::Array<char, sizeof(Wrap<void*>)> m_wrapData;
public: public:
template<typename T> template<typename T>
inline WrapPtr &operator=(T *ptr) noexcept { inline WrapPtr &operator=(T *ptr) noexcept {
@ -88,7 +88,7 @@ void setApplicationDataRaw(Context &ctx, WrapBase &applicationData) noexcept;
template<typename T> template<typename T>
void setApplicationData(Context &ctx, T *applicationData) noexcept { void setApplicationData(Context &ctx, T *applicationData) noexcept {
Wrap<T> w(applicationData); Wrap w(applicationData);
setApplicationDataRaw(ctx, w); setApplicationDataRaw(ctx, w);
} }
@ -99,12 +99,15 @@ template<typename T>
[[nodiscard]] [[nodiscard]]
T *applicationData(Context &ctx) noexcept { T *applicationData(Context &ctx) noexcept {
auto const raw = applicationDataRaw(ctx); auto const raw = applicationDataRaw(ctx);
if (!raw) [[unlikely]] {
return nullptr;
}
#ifdef OX_BARE_METAL #ifdef OX_BARE_METAL
auto const out = static_cast<Wrap<T>*>(raw); auto const out = static_cast<Wrap<T>*>(raw);
#else #else
auto const out = dynamic_cast<Wrap<T>*>(raw); auto const out = dynamic_cast<Wrap<T>*>(raw);
#endif #endif
oxAssert(out || !raw, "Cast failed - wrong type"); oxAssert(out, "Cast failed - wrong type");
return out->data; return out->data;
} }