Skip to content

Commit a462927

Browse files
committed
Merge CfxThread improvements (mr-681)
7aac7e2 - feat(scripting): created CfxThread to abstract away GtaThread
2 parents dbf1227 + 7aac7e2 commit a462927

File tree

2 files changed

+17
-25
lines changed

2 files changed

+17
-25
lines changed

code/client/shared/CrossBuildStruct.h

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,27 @@ struct CombineVersions<VersionList<Version1, Versions1...>, VersionList<Version2
3737
{
3838
};
3939

40-
template<template<int> typename Self, typename Versions>
40+
template<typename Self, template<int> typename Multi, typename Versions>
4141
struct CrossBuildVisitor
4242
{
4343
template<typename Visitor>
44-
static inline decltype(auto) Visit(void* ptr, Visitor&& vis)
44+
static inline decltype(auto) Visit(Self* ptr, Visitor&& vis)
4545
{
4646
return Visit(ptr, std::forward<Visitor>(vis), xbr::GetGameBuild(), Versions{});
4747
}
4848

4949
template<int Version, typename Visitor>
50-
static inline decltype(auto) Visit(void* ptr, Visitor&& vis, int /*version*/, VersionList<Version>)
50+
static inline decltype(auto) Visit(Self* ptr, Visitor&& vis, int /*version*/, VersionList<Version>)
5151
{
52-
return vis(static_cast<Self<Version>*>(ptr));
52+
return vis(reinterpret_cast<Multi<Version>*>(ptr));
5353
}
5454

5555
template<int Version1, int Version2, int... ExtraVersions, typename Visitor>
56-
static inline decltype(auto) Visit(void* ptr, Visitor&& vis, int version, VersionList<Version1, Version2, ExtraVersions...>)
56+
static inline decltype(auto) Visit(Self* ptr, Visitor&& vis, int version, VersionList<Version1, Version2, ExtraVersions...>)
5757
{
5858
if (version < Version2)
5959
{
60-
return vis(static_cast<Self<Version1>*>(ptr));
60+
return vis(reinterpret_cast<Multi<Version1>*>(ptr));
6161
}
6262

6363
return Visit(ptr, std::forward<Visitor>(vis), version, VersionList<Version2, ExtraVersions...>{});
@@ -71,18 +71,7 @@ template<typename Self, template<int Version> typename Multi, typename _Versions
7171
struct CrossBuildStructInfoBase
7272
{
7373
using Versions = _Versions;
74-
using Visitor = CrossBuildVisitor<Multi, Versions>;
75-
76-
template<typename... Args>
77-
static inline decltype(auto) Create(Args&&... args)
78-
{
79-
return static_cast<Self*>(Visitor::Visit(nullptr, [&](auto p)
80-
{
81-
using RuntimeType = typename std::remove_pointer<decltype(p)>::type;
82-
83-
return static_cast<void*>(new RuntimeType(std::forward<Args>(args)...));
84-
}));
85-
}
74+
using Visitor = CrossBuildVisitor<Self, Multi, Versions>;
8675
};
8776

8877
template<typename Self, template<int Version> typename Multi, int... Versions>
@@ -110,7 +99,7 @@ inline decltype(auto) operator->*(Self* self, Func&& func)
11099
}
111100

112101
template<typename T, typename... Args>
113-
static inline decltype(auto) CrossBuildNew(Args&&... args)
102+
static inline T* xbr_new(Args&&... args)
114103
{
115104
return static_cast<T*>(nullptr)->*[&](auto p)
116105
{
@@ -121,12 +110,15 @@ static inline decltype(auto) CrossBuildNew(Args&&... args)
121110
}
122111

123112
template<typename T>
124-
static inline decltype(auto) CrossBuildDelete(T* ptr)
113+
static inline void xbr_delete(T* ptr)
125114
{
126-
ptr->*[](auto self)
115+
if (ptr)
127116
{
128-
delete self;
129-
};
117+
ptr->*[](auto self)
118+
{
119+
delete self;
120+
};
121+
}
130122
}
131123

132124
#define XBV(...) \

code/components/rage-scripting-five/src/scrThread.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,13 +308,13 @@ struct CrossBuildStruct<CfxGtaThread>
308308
};
309309

310310
CfxThread::CfxThread()
311-
: Thread(CrossBuildNew<CfxGtaThread>(*this))
311+
: Thread(xbr_new<CfxGtaThread>(*this))
312312
{
313313
}
314314

315315
CfxThread::~CfxThread()
316316
{
317-
CrossBuildDelete(Thread);
317+
xbr_delete(Thread);
318318
}
319319

320320
void CfxThread::AttachScriptHandler()

0 commit comments

Comments
 (0)