diff --git a/.gitmodules b/.gitmodules index f76ddac..4b413f3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "lib/system"] path = lib/system url = https://github.com/whoahq/system.git +[submodule "lib/bc"] + path = lib/bc + url = https://github.com/whoahq/bc diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 54bc291..d1a21ab 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,4 +1,5 @@ -add_subdirectory(common) -add_subdirectory(squall) add_subdirectory(system) +add_subdirectory(squall) add_subdirectory(typhoon) +add_subdirectory(bc) +add_subdirectory(common) diff --git a/lib/bc b/lib/bc new file mode 160000 index 0000000..39f4bd3 --- /dev/null +++ b/lib/bc @@ -0,0 +1 @@ +Subproject commit 39f4bd35a3b0cfb4792360b590c4675722dabecf diff --git a/src/app/mac/WindowCallbacks.mm b/src/app/mac/WindowCallbacks.mm index 662f071..ccdd816 100644 --- a/src/app/mac/WindowCallbacks.mm +++ b/src/app/mac/WindowCallbacks.mm @@ -4,7 +4,7 @@ #include "gx/gll/CGxDeviceGLL.hpp" #include "gx/Device.hpp" #include "gx/Window.hpp" -#include "util/BlizzardCore.hpp" +#include void MacOnKeyDown(NSEvent* event) { BLIZZARD_ASSERT(false); diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index 5b677d4..7970d2d 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -21,6 +21,7 @@ target_link_libraries(client util world PUBLIC + bc common storm ) diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 6faf55a..cf3601c 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -11,10 +11,10 @@ #include "net/Poll.hpp" #include "ui/FrameScript.hpp" #include "ui/FrameXML.hpp" -#include "util/BlizzardCore.hpp" #include "util/CVar.hpp" #include "world/World.hpp" #include +#include #include #include diff --git a/src/gx/CMakeLists.txt b/src/gx/CMakeLists.txt index 8e08f0c..67b530a 100644 --- a/src/gx/CMakeLists.txt +++ b/src/gx/CMakeLists.txt @@ -29,6 +29,7 @@ target_link_libraries(gx ui util PUBLIC + bc freetype-2.0 storm tempest diff --git a/src/gx/gll/CGxDeviceGLL.cpp b/src/gx/gll/CGxDeviceGLL.cpp index 2842d7a..953c67d 100644 --- a/src/gx/gll/CGxDeviceGLL.cpp +++ b/src/gx/gll/CGxDeviceGLL.cpp @@ -10,6 +10,7 @@ #include #include #include +#include GLEnum CGxDeviceGLL::s_glCubeMapFaces[] = { GL_TEXTURE_CUBE_MAP_POSITIVE_X, diff --git a/src/gx/gll/GLBuffer.cpp b/src/gx/gll/GLBuffer.cpp index 5c800b9..bff77d8 100644 --- a/src/gx/gll/GLBuffer.cpp +++ b/src/gx/gll/GLBuffer.cpp @@ -1,7 +1,8 @@ #include "gx/gll/GLBuffer.h" #include "gx/gll/GLDevice.h" #include "gx/gll/GLPool.h" -#include "util/BlizzardCore.hpp" +#include +#include bool GLBuffer::m_UsingVBO = 1; diff --git a/src/gx/gll/GLContext.h b/src/gx/gll/GLContext.h index ef23ad6..15cae26 100644 --- a/src/gx/gll/GLContext.h +++ b/src/gx/gll/GLContext.h @@ -3,12 +3,12 @@ #include "gx/gll/GLAbstractWindow.h" #include "gx/gll/GLTypes.h" -#include "util/BlizzardCore.hpp" #include #include #include #include #include +#include #ifdef __OBJC__ #include diff --git a/src/gx/gll/GLContext.mm b/src/gx/gll/GLContext.mm index 395430d..cc2558d 100644 --- a/src/gx/gll/GLContext.mm +++ b/src/gx/gll/GLContext.mm @@ -1,6 +1,7 @@ #include "gx/gll/GLContext.h" #include "gx/gll/GLDevice.h" #include "util/Autorelease.hpp" +#include NSOpenGLContext* GLContext::s_MainContext; Blizzard::Thread::TLSSlot GLContext::s_CurrentContext; diff --git a/src/gx/gll/GLDevice.cpp b/src/gx/gll/GLDevice.cpp index 2bd18f7..3a74e0c 100644 --- a/src/gx/gll/GLDevice.cpp +++ b/src/gx/gll/GLDevice.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #define GL_MAX_STREAM 4 diff --git a/src/gx/gll/GLDevice.h b/src/gx/gll/GLDevice.h index bdd56a5..df09376 100644 --- a/src/gx/gll/GLDevice.h +++ b/src/gx/gll/GLDevice.h @@ -15,11 +15,11 @@ #include "gx/gll/GLTypes.h" #include "gx/gll/GLVertexArray.h" #include "gx/gll/GLWorker.h" -#include "util/BlizzardCore.hpp" #include #include #include #include +#include class GLDevice { public: diff --git a/src/gx/gll/GLFramebuffer.cpp b/src/gx/gll/GLFramebuffer.cpp index b578dc4..a172d32 100644 --- a/src/gx/gll/GLFramebuffer.cpp +++ b/src/gx/gll/GLFramebuffer.cpp @@ -3,6 +3,7 @@ #include "gx/gll/GLMipmap.h" #include "gx/gll/GLPool.h" #include "gx/gll/GLTypes.h" +#include GLFramebuffer* GLFramebuffer::Create(bool a1) { GLFramebuffer* framebuffer = new GLFramebuffer(a1); diff --git a/src/gx/gll/GLMipmap.cpp b/src/gx/gll/GLMipmap.cpp index bfeaa82..68d9fa8 100644 --- a/src/gx/gll/GLMipmap.cpp +++ b/src/gx/gll/GLMipmap.cpp @@ -2,6 +2,7 @@ #include "gx/gll/GLCommand.h" #include "gx/gll/GLDevice.h" #include "gx/gll/GLFramebuffer.h" +#include int32_t GLMipmap::GetDepthBits() { return this->m_DepthBits; diff --git a/src/gx/gll/GLObject.cpp b/src/gx/gll/GLObject.cpp index 2a73049..269b2b3 100644 --- a/src/gx/gll/GLObject.cpp +++ b/src/gx/gll/GLObject.cpp @@ -1,5 +1,5 @@ #include "gx/gll/GLObject.h" -#include "util/BlizzardCore.hpp" +#include void GLObject::AddRefTwin() { } diff --git a/src/gx/gll/GLShader.cpp b/src/gx/gll/GLShader.cpp index 192c8bc..7d1b19c 100644 --- a/src/gx/gll/GLShader.cpp +++ b/src/gx/gll/GLShader.cpp @@ -3,6 +3,7 @@ #include "gx/gll/GLPixelShader.h" #include "gx/gll/GLPool.h" #include "gx/gll/GLVertexShader.h" +#include // TODO // - threaded compiler support diff --git a/src/gx/gll/GLTexture.cpp b/src/gx/gll/GLTexture.cpp index bca15db..645138c 100644 --- a/src/gx/gll/GLTexture.cpp +++ b/src/gx/gll/GLTexture.cpp @@ -5,6 +5,8 @@ #include "gx/gll/GLUtil.h" #include "gx/texture/CGxTex.hpp" #include +#include +#include Blizzard::Thread::TLSSlot GLTexture::m_Bindings[4]; diff --git a/src/gx/gll/GLTexture.h b/src/gx/gll/GLTexture.h index 322dea1..e63aa2b 100644 --- a/src/gx/gll/GLTexture.h +++ b/src/gx/gll/GLTexture.h @@ -4,9 +4,9 @@ #include "gx/gll/GL.h" #include "gx/gll/GLObject.h" #include "gx/gll/GLTypes.h" -#include "util/BlizzardCore.hpp" #include #include +#include #define GLTFLAG_RENDERTARGET 0x1 #define GLTFLAG_DEPTH 0x2 diff --git a/src/gx/gll/GLUtil.cpp b/src/gx/gll/GLUtil.cpp index 29e8e5b..1df1438 100644 --- a/src/gx/gll/GLUtil.cpp +++ b/src/gx/gll/GLUtil.cpp @@ -1,5 +1,5 @@ #include "gx/gll/GLUtil.h" -#include "util/BlizzardCore.hpp" +#include uint32_t GLLTextureTypeToIndex(GLEnum textureType) { uint32_t index; diff --git a/src/gx/gll/GLVertexArray.cpp b/src/gx/gll/GLVertexArray.cpp index d45f3e6..e4cc825 100644 --- a/src/gx/gll/GLVertexArray.cpp +++ b/src/gx/gll/GLVertexArray.cpp @@ -1,5 +1,6 @@ #include "gx/gll/GLVertexArray.h" #include "gx/gll/GLDevice.h" +#include bool GLVertexArray::s_VertexArrayEnable = false; diff --git a/src/gx/gll/GLWindow.mm b/src/gx/gll/GLWindow.mm index 992fadc..df76eaa 100644 --- a/src/gx/gll/GLWindow.mm +++ b/src/gx/gll/GLWindow.mm @@ -3,6 +3,7 @@ #include "gx/gll/GLLayerView.h" #include "util/Autorelease.hpp" #include +#include GLWindowCallbacks DefaultCallbacks = { // TODO diff --git a/src/util/BlizzardCore.cpp b/src/util/BlizzardCore.cpp deleted file mode 100644 index a8bec56..0000000 --- a/src/util/BlizzardCore.cpp +++ /dev/null @@ -1,334 +0,0 @@ -#include "util/BlizzardCore.hpp" -#include -#include -#include -#include - -#if defined(WHOA_SYSTEM_MAC) - #include -#elif defined(WHOA_SYSTEM_LINUX) - #include -#endif - -Blizzard::System_Debug::AssertCallback Blizzard::System_Debug::s_assertCallback = nullptr; - -#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX) -bool Blizzard::System_Thread::s_initialized; -Blizzard::Lock::DoOnceData Blizzard::System_Lock::s_initMutexAttrOnce; -Blizzard::System_Lock::MutexAttr Blizzard::System_Lock::s_mutexattr; -Blizzard::Thread::ThreadRecord* Blizzard::System_Thread::s_mainThread; -Blizzard::Lock::Mutex Blizzard::System_Thread::s_mutex; -Blizzard::Lock::Mutex Blizzard::System_Thread::s_registryMutex; -Blizzard::Thread::TLSSlot Blizzard::System_Thread::s_stackTraceEntryPointTLS; -Blizzard::Thread::TLSSlot Blizzard::System_Thread::s_threadRecordTLS; -std::map* Blizzard::System_Thread::s_threadRegistry; -Blizzard::Thread::TLSSlot* Blizzard::System_Thread::s_slotList[128]; -int32_t Blizzard::System_Thread::s_slotListUsed; -#endif - -void Blizzard::Debug::Assert(const char* a1, const char* a2, uint32_t a3) { - if (System_Debug::s_assertCallback) { - System_Debug::s_assertCallback(a1, "", a2, a3); - } -} - -void Blizzard::Debug::SetAssertHandler(Blizzard::System_Debug::AssertCallback callback) { - System_Debug::s_assertCallback = callback; -} - -void* Blizzard::Memory::Allocate(uint32_t bytes) { - return SMemAlloc(bytes, __FILE__, __LINE__, 0); -} - -void* Blizzard::Memory::Allocate(uint32_t a1, uint32_t a2, const char* a3, uint32_t a4, const char* a5) { - // TODO - // - what is a5? - // - arg order? - // - flag manipluation? - - return SMemAlloc(a1, a3, a4, a2); -} - -void Blizzard::Memory::Free(void* ptr) { - SMemFree(ptr); -} - -int32_t Blizzard::String::Copy(char* dst, const char* src, size_t len) { - if (!len || !dst) { - return 0; - } - - if (!src) { - *dst = 0; - return 0; - } - - char* v3 = dst + len - 1; - - char v4; - const char* v5; - char* v6; - - int32_t result; - - if (dst < v3 && (v4 = *src, v5 = src, v6 = dst, *src)) { - do { - *v6++ = v4; - - if (v3 <= v6) { - break; - } - - v4 = (v5++)[1]; - } while ( v4 ); - - result = v6 - dst; - } else { - v6 = dst; - result = 0; - } - - *v6 = 0; - - return result; -} - -uint32_t Blizzard::String::Length(const char* a1) { - if (a1) { - return strlen(a1); - } else { - return 0; - } -} - -void Blizzard::String::MemFill(void* a1, uint32_t a2, unsigned char a3) { - memset(a1, a3, a2); -} - -void Blizzard::Process::Sleep(uint32_t duration) { -#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX) - struct timespec request; - - request.tv_sec = 0; - request.tv_nsec = duration * 1000000; - - nanosleep(&request, nullptr); -#endif -} - -#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX) -void Blizzard::Lock::DoOnce(DoOnceData& a1, void (*a2)(void*), void* a3) { - if (!a1.done) { - if (Blizzard::Lock::Atomic::Increment(&a1.atomic) == 1) { - a2(a3); - a1.done = true; - } else { - while (!a1.done) { - Blizzard::Process::Sleep(1); - } - } - } -} - -bool Blizzard::Lock::MutexCreate(Blizzard::Lock::Mutex& a1) { - Blizzard::Lock::DoOnce(System_Lock::s_initMutexAttrOnce, System_Lock::InitAttr, 0); - - bool result = pthread_mutex_init(&a1, &System_Lock::s_mutexattr); - - // Blizzard::Debug::Assert(result == 0); - - return result; -} - -bool Blizzard::Lock::MutexEnter(Blizzard::Lock::Mutex& a1) { - bool result = pthread_mutex_lock(&a1); - - // Blizzard::Debug::Assert(result == 0); - - return result; -} - -bool Blizzard::Lock::MutexLeave(Blizzard::Lock::Mutex& a1) { - bool result = pthread_mutex_unlock(&a1); - - // Blizzard::Debug::Assert(result == 0); - - return result; -} - -int32_t Blizzard::Lock::Atomic::Increment(volatile int32_t* value) { -#if defined(WHOA_SYSTEM_MAC) - return OSAtomicAdd32(1, value); -#elif defined(WHOA_SYSTEM_LINUX) - volatile std::atomic atom(*value); - std::atomic_fetch_add(&atom, 1); - return atom; -#endif -} - -void Blizzard::System_Lock::InitAttr(void* a1) { - pthread_mutexattr_init(&System_Lock::s_mutexattr); - pthread_mutexattr_settype(&System_Lock::s_mutexattr, PTHREAD_MUTEX_RECURSIVE); -} - -void Blizzard::Thread::AllocateLocalStorage(TLSSlot* slot) { - System_Thread::AllocateLocalStorage(slot, 0); -} - -void* Blizzard::Thread::RegisterLocalStorage(TLSSlot* slot, void* (*constructor)(void*), void* userData, void (*destructor)(void*)) { - if (!System_Thread::TLSSlotIsAllocated(slot) && !System_Thread::AllocateTLSSlot(slot, destructor)) { - // Blizzard::Debug::Assert(!"Unable to allocate thread-local storage"); - } - - void* value; - - value = System_Thread::InternalGetLocalStorage(slot); - - if (value) { - return value; - } - - value = constructor(userData); - - System_Thread::InternalSetLocalStorage(slot, value); - - return value; -} - -void Blizzard::Thread::SetLocalStorage(const TLSSlot* slot, const void* value) { - BLIZZARD_ASSERT(Blizzard::Thread::TLSSlotIsAllocated(slot)); - - System_Thread::InternalSetLocalStorage(slot, value); -} - -bool Blizzard::Thread::TLSSlotIsAllocated(const TLSSlot* slot) { - return System_Thread::TLSSlotIsAllocated(slot); -} - -void Blizzard::System_Thread::AddToRegistry(Thread::ThreadRecord* thread) { - Blizzard::Lock::MutexEnter(System_Thread::s_registryMutex); - - if (!System_Thread::s_threadRegistry) { - auto m = Blizzard::Memory::Allocate(sizeof(std::map), 0, __FILE__, __LINE__, nullptr); - System_Thread::s_threadRegistry = new (m) std::map(); - } - - System_Thread::s_threadRegistry->insert(std::pair(thread, thread)); - - Blizzard::Lock::MutexLeave(System_Thread::s_registryMutex); -} - -bool Blizzard::System_Thread::AllocateLocalStorage(Thread::TLSSlot* slot, void (*destructor)(void*)) { - System_Thread::InitThreadSystem(); - - BLIZZARD_ASSERT(!System_Thread::TLSSlotIsAllocated(slot)); - - int32_t result; - - if (System_Thread::InternalAllocateLocalStorage(slot, destructor)) { - slot->destructor = destructor; - - Blizzard::Lock::MutexEnter(System_Thread::s_mutex); - - int32_t v3 = System_Thread::s_slotListUsed; - System_Thread::s_slotList[System_Thread::s_slotListUsed] = slot; - System_Thread::s_slotListUsed = v3 + 1; - - Blizzard::Lock::MutexLeave(System_Thread::s_mutex); - - result = 1; - } else { - BLIZZARD_ASSERT(!"failed to allocate TLS"); - - result = 0; - } - - return result; -} - -bool Blizzard::System_Thread::AllocateTLSSlot(Thread::TLSSlot* slot, void (*destructor)(void*)) { - System_Thread::InitThreadSystem(); - - Blizzard::Lock::MutexEnter(System_Thread::s_mutex); - - int32_t result = 0; - - if (System_Thread::TLSSlotIsAllocated(slot) || System_Thread::AllocateLocalStorage(slot, destructor)) { - result = 1; - } - - Blizzard::Lock::MutexLeave(System_Thread::s_mutex); - - return result; -} - -void Blizzard::System_Thread::InitThreadSystem() { - if (System_Thread::s_initialized) { - return; - } - - System_Thread::s_initialized = true; - - Blizzard::Lock::MutexCreate(System_Thread::s_mutex); - Blizzard::Lock::MutexCreate(System_Thread::s_registryMutex); - - Blizzard::Thread::AllocateLocalStorage(&System_Thread::s_threadRecordTLS); - Blizzard::Thread::AllocateLocalStorage(&System_Thread::s_stackTraceEntryPointTLS); - - System_Thread::s_mainThread = System_Thread::NewThread(nullptr, nullptr, nullptr); - Blizzard::Thread::SetLocalStorage(&System_Thread::s_threadRecordTLS, System_Thread::s_mainThread); - - System_Thread::s_mainThread->unkC = 1; - System_Thread::s_mainThread->unk10 = 1; -} - -bool Blizzard::System_Thread::InternalAllocateLocalStorage(Thread::TLSSlot* slot, void (*destructor)(void*)) { - if (!pthread_key_create(&slot->key, destructor)) { - slot->allocated = true; - return 1; - } else { - return 0; - } -} - -void* Blizzard::System_Thread::InternalGetLocalStorage(const Thread::TLSSlot* slot) { - return pthread_getspecific(slot->key); -} - -void Blizzard::System_Thread::InternalSetLocalStorage(const Thread::TLSSlot* slot, const void* value) { - int32_t err = pthread_setspecific(slot->key, value); - - BLIZZARD_ASSERT(err == 0); -} - -Blizzard::Thread::ThreadRecord* Blizzard::System_Thread::NewThread(uint32_t (*a1)(void*), void* a2, const char* a3) { - const char* v3 = a3; - - if (!a3) { - v3 = ""; - } - - int32_t v4 = Blizzard::String::Length(v3); - - Blizzard::Thread::ThreadRecord* thread = static_cast( - Blizzard::Memory::Allocate(sizeof(Blizzard::Thread::ThreadRecord) + v4 + 1, 0, __FILE__, __LINE__, nullptr) - ); - - Blizzard::String::MemFill(thread, sizeof(Blizzard::Thread::ThreadRecord), 0); - - thread->unk4 = a2; - thread->unk8 = a1; - thread->unkC = 0; - thread->unk10 = 2; - - Blizzard::String::Copy(thread->unk2C, v3, v4 + 1); - - System_Thread::AddToRegistry(thread); - - return thread; -} - -bool Blizzard::System_Thread::TLSSlotIsAllocated(const Thread::TLSSlot* slot) { - return slot->allocated; -} -#endif diff --git a/src/util/BlizzardCore.hpp b/src/util/BlizzardCore.hpp deleted file mode 100644 index 1067e7d..0000000 --- a/src/util/BlizzardCore.hpp +++ /dev/null @@ -1,134 +0,0 @@ -#ifndef UTIL_BLIZZARD_CORE_HPP -#define UTIL_BLIZZARD_CORE_HPP - -#include -#include - -#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX) - #include -#endif - -#if defined(NDEBUG) - #define BLIZZARD_ASSERT(x) if (!(x)) { return 0; } -#else - #define BLIZZARD_ASSERT(x) if (!(x)) { Blizzard::Debug::Assert(#x, __FILE__, __LINE__); } -#endif - -namespace Blizzard { - namespace Memory { - // Functions - void* Allocate(uint32_t); - void* Allocate(uint32_t, uint32_t, const char*, uint32_t, const char*); - void Free(void*); - }; - - namespace String { - // Functions - int32_t Copy(char*, const char*, size_t); - uint32_t Length(const char*); - void MemFill(void*, uint32_t, unsigned char); - }; - - namespace Process { - // Functions - void Sleep(uint32_t); - } - - namespace System_Debug { - // Types - typedef void (*AssertCallback)(const char*, const char*, const char*, uint32_t); - - // Variables - extern AssertCallback s_assertCallback; - } - - namespace Debug { - // Functions - void Assert(const char*, const char*, uint32_t); - void SetAssertHandler(Blizzard::System_Debug::AssertCallback); - } - -#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX) - namespace Lock { - // Types - typedef pthread_mutex_t Mutex; - - struct DoOnceData { - bool done; - int32_t atomic; - }; - - // Functions - void DoOnce(DoOnceData&, void (*)(void*), void*); - bool MutexCreate(Mutex&); - bool MutexEnter(Mutex&); - bool MutexLeave(Mutex&); - - namespace Atomic { - int32_t Increment(volatile int32_t*); - } - } - - namespace System_Lock { - // Types - typedef pthread_mutexattr_t MutexAttr; - - // Variables - extern Lock::DoOnceData s_initMutexAttrOnce; - extern MutexAttr s_mutexattr; - - // Functions - void InitAttr(void*); - } - - namespace Thread { - // Types - struct ThreadRecord { - pthread_t unk0; - void* unk4; - uint32_t (*unk8)(void*); - int32_t unkC; - int32_t unk10; - char* unk2C; - }; - - struct TLSSlot { - pthread_key_t key; - void (*destructor)(void*); - bool allocated; - }; - - // Functions - void AllocateLocalStorage(TLSSlot*); - void* RegisterLocalStorage(TLSSlot*, void* (*)(void*), void*, void (*)(void*)); - void SetLocalStorage(const TLSSlot*, const void*); - bool TLSSlotIsAllocated(const TLSSlot*); - }; - - namespace System_Thread { - // Variables - extern bool s_initialized; - extern Thread::ThreadRecord* s_mainThread; - extern Lock::Mutex s_mutex; - extern Lock::Mutex s_registryMutex; - extern Thread::TLSSlot s_stackTraceEntryPointTLS; - extern Thread::TLSSlot s_threadRecordTLS; - extern std::map* s_threadRegistry; - extern Thread::TLSSlot* s_slotList[128]; - extern int32_t s_slotListUsed; - - // Functions - void AddToRegistry(Thread::ThreadRecord*); - bool AllocateLocalStorage(Thread::TLSSlot*, void (*)(void*)); - bool AllocateTLSSlot(Thread::TLSSlot*, void (*)(void*)); - void InitThreadSystem(void); - bool InternalAllocateLocalStorage(Thread::TLSSlot*, void (*)(void*)); - void* InternalGetLocalStorage(const Thread::TLSSlot*); - void InternalSetLocalStorage(const Thread::TLSSlot*, const void*); - Thread::ThreadRecord* NewThread(uint32_t (*)(void*), void*, const char*); - bool TLSSlotIsAllocated(const Thread::TLSSlot*); - }; -#endif -}; - -#endif