Remove threads.h and replace its definitions with their C++11 equivalents (#5957)
authorShadowNinja <ShadowNinja@users.noreply.github.com>
Sun, 11 Jun 2017 07:43:05 +0000 (03:43 -0400)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Sun, 11 Jun 2017 07:43:05 +0000 (09:43 +0200)
This also changes threadProc's signature, since C++11 supports arbitrary
thread function signatures.

16 files changed:
src/client/tile.cpp
src/client/tile.h
src/debug.cpp
src/itemdef.cpp
src/log.cpp
src/log.h
src/porting.h
src/script/cpp_api/s_base.h
src/script/cpp_api/s_internal.h
src/shader.cpp
src/shader.h
src/threading/event.cpp
src/threading/event.h
src/threading/thread.cpp
src/threading/thread.h
src/threads.h [deleted file]

index 10a9d5f0d23cc3f2ca9c4740b2c0d37fdd2aa2b4..e47a40ea138c1f0a50ef9e5836b75a052026bfcd 100644 (file)
@@ -386,7 +386,7 @@ public:
 private:
 
        // The id of the thread that is allowed to use irrlicht directly
-       threadid_t m_main_thread;
+       std::thread::id m_main_thread;
        // The irrlicht device
        IrrlichtDevice *m_device;
 
@@ -445,7 +445,7 @@ TextureSource::TextureSource(IrrlichtDevice *device):
 {
        assert(m_device); // Pre-condition
 
-       m_main_thread = thr_get_current_thread_id();
+       m_main_thread = std::this_thread::get_id();
 
        // Add a NULL TextureInfo as the first index, named ""
        m_textureinfo_cache.push_back(TextureInfo(""));
@@ -508,7 +508,7 @@ u32 TextureSource::getTextureId(const std::string &name)
        /*
                Get texture
        */
-       if (thr_is_current_thread(m_main_thread))
+       if (std::this_thread::get_id() == m_main_thread)
        {
                return generateTexture(name);
        }
@@ -616,7 +616,7 @@ u32 TextureSource::generateTexture(const std::string &name)
        /*
                Calling only allowed from main thread
        */
-       if (!thr_is_current_thread(m_main_thread)) {
+       if (std::this_thread::get_id() != m_main_thread) {
                errorstream<<"TextureSource::generateTexture() "
                                "called not from main thread"<<std::endl;
                return 0;
@@ -695,7 +695,7 @@ video::ITexture* TextureSource::getTextureForMesh(const std::string &name, u32 *
 Palette* TextureSource::getPalette(const std::string &name)
 {
        // Only the main thread may load images
-       sanity_check(thr_is_current_thread(m_main_thread));
+       sanity_check(std::this_thread::get_id() == m_main_thread);
 
        if (name == "")
                return NULL;
@@ -771,7 +771,7 @@ void TextureSource::insertSourceImage(const std::string &name, video::IImage *im
 {
        //infostream<<"TextureSource::insertSourceImage(): name="<<name<<std::endl;
 
-       sanity_check(thr_is_current_thread(m_main_thread));
+       sanity_check(std::this_thread::get_id() == m_main_thread);
 
        m_sourcecache.insert(name, img, true, m_device->getVideoDriver());
        m_source_image_existence.set(name, true);
index 15854fb71e19fb7246776b63048adae902cae3af..23255c4612636c056347d2d4dc0ca35280cba5e3 100644 (file)
@@ -24,7 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "irr_v3d.h"
 #include <ITexture.h>
 #include <IrrlichtDevice.h>
-#include "threads.h"
 #include <string>
 #include <vector>
 #include "util/numeric.h"
index 0490fcf4e095022478be6d8ab8d72a67555fb9a4..86b7278129c73e84ef70d2aac23cf959bef145f2 100644 (file)
@@ -21,12 +21,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "porting.h"
 #include "debug.h"
 #include "exceptions.h"
-#include "threads.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <cstring>
 #include <map>
 #include <sstream>
+#include <thread>
 #include "threading/mutex_auto_lock.h"
 #include "config.h"
 
@@ -52,7 +52,7 @@ void sanity_check_fn(const char *assertion, const char *file,
 #endif
 
        errorstream << std::endl << "In thread " << std::hex
-               << thr_get_current_thread_id() << ":" << std::endl;
+               << std::this_thread::get_id() << ":" << std::endl;
        errorstream << file << ":" << line << ": " << function
                << ": An engine assumption '" << assertion << "' failed." << std::endl;
 
@@ -69,7 +69,7 @@ void fatal_error_fn(const char *msg, const char *file,
 #endif
 
        errorstream << std::endl << "In thread " << std::hex
-               << thr_get_current_thread_id() << ":" << std::endl;
+               << std::this_thread::get_id() << ":" << std::endl;
        errorstream << file << ":" << line << ": " << function
                << ": A fatal error occured: " << msg << std::endl;
 
@@ -84,19 +84,19 @@ void fatal_error_fn(const char *msg, const char *file,
 
 struct DebugStack
 {
-       DebugStack(threadid_t id);
+       DebugStack(std::thread::id id);
        void print(FILE *file, bool everything);
        void print(std::ostream &os, bool everything);
 
-       threadid_t threadid;
+       std::thread::id thread_id;
        char stack[DEBUG_STACK_SIZE][DEBUG_STACK_TEXT_SIZE];
        int stack_i; // Points to the lowest empty position
        int stack_max_i; // Highest i that was seen
 };
 
-DebugStack::DebugStack(threadid_t id)
+DebugStack::DebugStack(std::thread::id id)
 {
-       threadid = id;
+       thread_id = id;
        stack_i = 0;
        stack_max_i = 0;
        memset(stack, 0, DEBUG_STACK_SIZE*DEBUG_STACK_TEXT_SIZE);
@@ -105,52 +105,43 @@ DebugStack::DebugStack(threadid_t id)
 void DebugStack::print(FILE *file, bool everything)
 {
        std::ostringstream os;
-       os << threadid;
+       os << thread_id;
        fprintf(file, "DEBUG STACK FOR THREAD %s:\n",
                os.str().c_str());
 
-       for(int i=0; i<stack_max_i; i++)
-       {
-               if(i == stack_i && everything == false)
+       for (int i = 0; i < stack_max_i; i++) {
+               if (i == stack_i && everything == false)
                        break;
 
-               if(i < stack_i)
+               if (i < stack_i)
                        fprintf(file, "#%d  %s\n", i, stack[i]);
                else
                        fprintf(file, "(Leftover data: #%d  %s)\n", i, stack[i]);
        }
 
-       if(stack_i == DEBUG_STACK_SIZE)
+       if (stack_i == DEBUG_STACK_SIZE)
                fprintf(file, "Probably overflown.\n");
 }
 
 void DebugStack::print(std::ostream &os, bool everything)
 {
-       os<<"DEBUG STACK FOR THREAD "<<threadid<<": "<<std::endl;
+       os<<"DEBUG STACK FOR THREAD "<<thread_id<<": "<<std::endl;
 
-       for(int i=0; i<stack_max_i; i++)
-       {
+       for(int i = 0; i < stack_max_i; i++) {
                if(i == stack_i && everything == false)
                        break;
 
-               if(i < stack_i)
+               if (i < stack_i)
                        os<<"#"<<i<<"  "<<stack[i]<<std::endl;
                else
                        os<<"(Leftover data: #"<<i<<"  "<<stack[i]<<")"<<std::endl;
        }
 
-       if(stack_i == DEBUG_STACK_SIZE)
+       if (stack_i == DEBUG_STACK_SIZE)
                os<<"Probably overflown."<<std::endl;
 }
 
-// Note:  Using pthread_t (that is, threadid_t on POSIX platforms) as the key to
-// a std::map is naughty.  Formally, a pthread_t may only be compared using
-// pthread_equal() - pthread_t lacks the well-ordered property needed for
-// comparisons in binary searches.  This should be fixed at some point by
-// defining a custom comparator with an arbitrary but stable ordering of
-// pthread_t, but it isn't too important since none of our supported platforms
-// implement pthread_t as a non-ordinal type.
-std::map<threadid_t, DebugStack*> g_debug_stacks;
+std::map<std::thread::id, DebugStack*> g_debug_stacks;
 std::mutex g_debug_stacks_mutex;
 
 void debug_stacks_init()
@@ -163,11 +154,8 @@ void debug_stacks_print_to(std::ostream &os)
 
        os<<"Debug stacks:"<<std::endl;
 
-       for(std::map<threadid_t, DebugStack*>::iterator
-                       i = g_debug_stacks.begin();
-                       i != g_debug_stacks.end(); ++i)
-       {
-               i->second->print(os, false);
+       for (auto it : g_debug_stacks) {
+               it.second->print(os, false);
        }
 }
 
@@ -178,36 +166,29 @@ void debug_stacks_print()
 
 DebugStacker::DebugStacker(const char *text)
 {
-       threadid_t threadid = thr_get_current_thread_id();
+       std::thread::id thread_id = std::this_thread::get_id();
 
        MutexAutoLock lock(g_debug_stacks_mutex);
 
-       std::map<threadid_t, DebugStack*>::iterator n;
-       n = g_debug_stacks.find(threadid);
-       if(n != g_debug_stacks.end())
-       {
+       auto n = g_debug_stacks.find(thread_id);
+       if (n != g_debug_stacks.end()) {
                m_stack = n->second;
-       }
-       else
-       {
+       } else {
                /*DEBUGPRINT("Creating new debug stack for thread %x\n",
-                               (unsigned int)threadid);*/
-               m_stack = new DebugStack(threadid);
-               g_debug_stacks[threadid] = m_stack;
+                               (unsigned int)thread_id);*/
+               m_stack = new DebugStack(thread_id);
+               g_debug_stacks[thread_id] = m_stack;
        }
 
-       if(m_stack->stack_i >= DEBUG_STACK_SIZE)
-       {
+       if (m_stack->stack_i >= DEBUG_STACK_SIZE) {
                m_overflowed = true;
-       }
-       else
-       {
+       } else {
                m_overflowed = false;
 
                snprintf(m_stack->stack[m_stack->stack_i],
                                DEBUG_STACK_TEXT_SIZE, "%s", text);
                m_stack->stack_i++;
-               if(m_stack->stack_i > m_stack->stack_max_i)
+               if (m_stack->stack_i > m_stack->stack_max_i)
                        m_stack->stack_max_i = m_stack->stack_i;
        }
 }
@@ -216,18 +197,17 @@ DebugStacker::~DebugStacker()
 {
        MutexAutoLock lock(g_debug_stacks_mutex);
 
-       if(m_overflowed == true)
+       if (m_overflowed == true)
                return;
 
        m_stack->stack_i--;
 
-       if(m_stack->stack_i == 0)
-       {
-               threadid_t threadid = m_stack->threadid;
+       if (m_stack->stack_i == 0) {
+               std::thread::id thread_id = m_stack->thread_id;
                /*DEBUGPRINT("Deleting debug stack for thread %x\n",
-                               (unsigned int)threadid);*/
+                               (unsigned int)thread_id);*/
                delete m_stack;
-               g_debug_stacks.erase(threadid);
+               g_debug_stacks.erase(thread_id);
        }
 }
 
index 53b6e04cdf8265a6af3b62fe10e457137e944ab2..f1cc03c4b652ade4519796cad5511c76cb2c8ea1 100644 (file)
@@ -245,7 +245,7 @@ public:
        {
 
 #ifndef SERVER
-               m_main_thread = thr_get_current_thread_id();
+               m_main_thread = std::this_thread::get_id();
 #endif
                clear();
        }
@@ -320,7 +320,7 @@ public:
                                <<name<<"\""<<std::endl;
 
                // This is not thread-safe
-               sanity_check(thr_is_current_thread(m_main_thread));
+               sanity_check(std::this_thread::get_id() == m_main_thread);
 
                // Skip if already in cache
                ClientCached *cc = NULL;
@@ -356,15 +356,12 @@ public:
        {
                ClientCached *cc = NULL;
                m_clientcached.get(name, &cc);
-               if(cc)
+               if (cc)
                        return cc;
 
-               if(thr_is_current_thread(m_main_thread))
-               {
+               if (std::this_thread::get_id() == m_main_thread) {
                        return createClientCachedDirect(name, client);
-               }
-               else
-               {
+               } else {
                        // We're gonna ask the result to be put into here
                        static ResultQueue<std::string, ClientCached*, u8, u8> result_queue;
 
@@ -580,7 +577,7 @@ private:
        StringMap m_aliases;
 #ifndef SERVER
        // The id of the thread that is allowed to use irrlicht directly
-       threadid_t m_main_thread;
+       std::thread::id m_main_thread;
        // A reference to this can be returned when nothing is found, to avoid NULLs
        mutable ClientCached m_dummy_clientcached;
        // Cached textures and meshes
index 589cfd909806ee7ba6be55d720c6f06ba486a6bf..28118066f4cc79d44c3f36ba7081b8439ae07e37 100644 (file)
@@ -223,14 +223,14 @@ void Logger::setLevelSilenced(LogLevel lev, bool silenced)
 
 void Logger::registerThread(const std::string &name)
 {
-       threadid_t id = thr_get_current_thread_id();
+       std::thread::id id = std::this_thread::get_id();
        MutexAutoLock lock(m_mutex);
        m_thread_names[id] = name;
 }
 
 void Logger::deregisterThread()
 {
-       threadid_t id = thr_get_current_thread_id();
+       std::thread::id id = std::this_thread::get_id();
        MutexAutoLock lock(m_mutex);
        m_thread_names.erase(id);
 }
@@ -253,9 +253,9 @@ const std::string Logger::getLevelLabel(LogLevel lev)
 
 const std::string Logger::getThreadName()
 {
-       std::map<threadid_t, std::string>::const_iterator it;
+       std::map<std::thread::id, std::string>::const_iterator it;
 
-       threadid_t id = thr_get_current_thread_id();
+       std::thread::id id = std::this_thread::get_id();
        it = m_thread_names.find(id);
        if (it != m_thread_names.end())
                return it->second;
index c017d127e6c21d9305c3c545b728117fa3e8d3ed..56492ff8688f2e0abf9210d26fcaad5a1838ea1c 100644 (file)
--- a/src/log.h
+++ b/src/log.h
@@ -24,8 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <queue>
 #include <string>
 #include <fstream>
+#include <thread>
 #include <mutex>
-#include "threads.h"
 #include "irrlichttypes.h"
 
 class ILogOutput;
@@ -79,7 +79,7 @@ private:
        // written to when one thread has access currently).
        // Works on all known architectures (x86, ARM, MIPS).
        volatile bool m_silenced_levels[LL_MAX];
-       std::map<threadid_t, std::string> m_thread_names;
+       std::map<std::thread::id, std::string> m_thread_names;
        mutable std::mutex m_mutex;
        bool m_trace_enabled;
 };
index 7034d956bdec2abed7a5b136847dd9e7e909335c..05614543ac383866fe8fbb9515a1e513219fb938 100644 (file)
@@ -40,7 +40,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "debug.h"
 #include "constants.h"
 #include "gettime.h"
-#include "threads.h"
 
 #ifdef _MSC_VER
        #define SWPRINTF_CHARSTRING L"%S"
index eda4e73ac6f561ddd78ec66c8b07606b53a87db8..ed056db31b7f49f30b7859fbcfe5d58ea9e75e5b 100644 (file)
@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include <iostream>
 #include <string>
+#include <thread>
 #include "util/basic_macros.h"
 
 extern "C" {
@@ -29,7 +30,6 @@ extern "C" {
 }
 
 #include "irrlichttypes.h"
-#include "threads.h"
 #include "threading/mutex_auto_lock.h"
 #include "common/c_types.h"
 #include "common/c_internal.h"
@@ -122,7 +122,7 @@ protected:
        bool            m_secure;
 #ifdef SCRIPTAPI_LOCK_DEBUG
        int             m_lock_recursion_count;
-       threadid_t      m_owning_thread;
+       std::thread::id m_owning_thread;
 #endif
 
 private:
index 37473c497e776def17d6842df046e56a74b5b99b..315561e088df601600771c8de33cf2a06121073a 100644 (file)
@@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef S_INTERNAL_H_
 #define S_INTERNAL_H_
 
+#include <thread>
 #include "common/c_internal.h"
 #include "cpp_api/s_base.h"
 
@@ -35,23 +36,24 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 class LockChecker {
 public:
-       LockChecker(int *recursion_counter, threadid_t *owning_thread)
+       LockChecker(int *recursion_counter, std::thread::id *owning_thread)
        {
                m_lock_recursion_counter = recursion_counter;
                m_owning_thread          = owning_thread;
                m_original_level         = *recursion_counter;
 
-               if (*m_lock_recursion_counter > 0)
-                       assert(thr_is_current_thread(*m_owning_thread));
-               else
-                       *m_owning_thread = thr_get_current_thread_id();
+               if (*m_lock_recursion_counter > 0) {
+                       assert(*m_owning_thread == std::this_thread::get_id());
+               } else {
+                       *m_owning_thread = std::this_thread::get_id();
+               }
 
                (*m_lock_recursion_counter)++;
        }
 
        ~LockChecker()
        {
-               assert(thr_is_current_thread(*m_owning_thread));
+               assert(*m_owning_thread == std::this_thread::get_id());
                assert(*m_lock_recursion_counter > 0);
 
                (*m_lock_recursion_counter)--;
@@ -62,7 +64,7 @@ public:
 private:
        int *m_lock_recursion_counter;
        int m_original_level;
-       threadid_t *m_owning_thread;
+       std::thread::id *m_owning_thread;
 };
 
 #define SCRIPTAPI_LOCK_CHECK           \
index 1d3f2f6a1bb524e6c132838657ee016ffeff4416..5ff8c910b87bb68bc685cbd93a19cb0c3abdfe3f 100644 (file)
@@ -308,7 +308,7 @@ public:
 private:
 
        // The id of the thread that is allowed to use irrlicht directly
-       threadid_t m_main_thread;
+       std::thread::id m_main_thread;
        // The irrlicht device
        IrrlichtDevice *m_device;
 
@@ -359,7 +359,7 @@ ShaderSource::ShaderSource(IrrlichtDevice *device):
 {
        assert(m_device); // Pre-condition
 
-       m_main_thread = thr_get_current_thread_id();
+       m_main_thread = std::this_thread::get_id();
 
        // Add a dummy ShaderInfo as the first index, named ""
        m_shaderinfo_cache.push_back(ShaderInfo());
@@ -387,7 +387,7 @@ u32 ShaderSource::getShader(const std::string &name,
                Get shader
        */
 
-       if (thr_is_current_thread(m_main_thread)) {
+       if (std::this_thread::get_id() == m_main_thread) {
                return getShaderIdDirect(name, material_type, drawtype);
        } else {
                /*errorstream<<"getShader(): Queued: name=\""<<name<<"\""<<std::endl;*/
@@ -446,7 +446,7 @@ u32 ShaderSource::getShaderIdDirect(const std::string &name,
        /*
                Calling only allowed from main thread
        */
-       if (!thr_is_current_thread(m_main_thread)) {
+       if (std::this_thread::get_id() != m_main_thread) {
                errorstream<<"ShaderSource::getShaderIdDirect() "
                                "called not from main thread"<<std::endl;
                return 0;
@@ -494,7 +494,7 @@ void ShaderSource::insertSourceShader(const std::string &name_of_shader,
                        "name_of_shader=\""<<name_of_shader<<"\", "
                        "filename=\""<<filename<<"\""<<std::endl;*/
 
-       sanity_check(thr_is_current_thread(m_main_thread));
+       sanity_check(std::this_thread::get_id() == m_main_thread);
 
        m_sourcecache.insert(name_of_shader, filename, program, true);
 }
index 766871f02405fc0ae37afe99fafd1f92e9a19622..4d31f705ff10b6da05f63e0dcdd715d1e55d30f6 100644 (file)
@@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include <IMaterialRendererServices.h>
 #include "irrlichttypes_extrabloated.h"
-#include "threads.h"
 #include <string>
 
 class IGameDef;
index 4e8d4bb3e8a927b20663222bf4db8526b9e16432..885e732c8d2ba0b82ced3e99f9ffc900e203d99f 100644 (file)
@@ -24,6 +24,7 @@ DEALINGS IN THE SOFTWARE.
 */
 
 #include "threading/event.h"
+#include "threading/mutex_auto_lock.h"
 
 void Event::wait()
 {
index 458864c8204bbc5cefa05876b7cbe32fcb90b81b..af91d04c73da74ee844ebf0ac4c1ff059739289b 100644 (file)
@@ -26,10 +26,7 @@ DEALINGS IN THE SOFTWARE.
 #ifndef THREADING_EVENT_H
 #define THREADING_EVENT_H
 
-#include "threads.h"
-
 #include <condition_variable>
-#include "threading/mutex_auto_lock.h"
 
 /** A syncronization primitive that will wake up one waiting thread when signaled.
  * Calling @c signal() multiple times before a waiting thread has had a chance
index e566824f78e8a8ec726fedf33f29a22bde39c527..cc4d65656f6dae7dc68f490917d2c730f17cbf55 100644 (file)
@@ -180,10 +180,8 @@ bool Thread::getReturnValue(void **ret)
 }
 
 
-void *Thread::threadProc(void *param)
+void Thread::threadProc(Thread *thr)
 {
-       Thread *thr = (Thread *)param;
-
 #ifdef _AIX
        thr->m_kernel_thread_id = thread_self();
 #endif
@@ -201,9 +199,6 @@ void *Thread::threadProc(void *param)
 
        thr->m_running = false;
        g_logger.deregisterThread();
-
-       // 0 is returned here to avoid an unnecessary ifdef clause
-       return 0;
 }
 
 
index 6292d9ed7638ce1a784aceabd47dc72a4f96cb0a..284c8e46c4555ccf93f57eaa4884d3fa946e719e 100644 (file)
@@ -26,10 +26,10 @@ DEALINGS IN THE SOFTWARE.
 #pragma once
 
 #include "util/basic_macros.h"
-#include "threads.h"
 
 #include <string>
 #include <atomic>
+#include <thread>
 #include <mutex>
 
 #ifdef _AIX
@@ -49,10 +49,12 @@ DEALINGS IN THE SOFTWARE.
 #endif
 
 
+
 class Thread {
 public:
        Thread(const std::string &name="");
        virtual ~Thread();
+       DISABLE_CLASS_COPY(Thread)
 
        /*
         * Begins execution of a new thread at the pure virtual method Thread::run().
@@ -87,13 +89,12 @@ public:
        /*
         * Returns true if the calling thread is this Thread object.
         */
-       bool isCurrentThread() { return thr_is_current_thread(getThreadId()); }
+       bool isCurrentThread() { return std::this_thread::get_id() == getThreadId(); }
 
-       inline bool isRunning() { return m_running; }
-       inline bool stopRequested() { return m_request_stop; }
+       bool isRunning() { return m_running; }
+       bool stopRequested() { return m_request_stop; }
 
-       inline threadid_t getThreadId() { return m_thread_obj->get_id(); }
-       inline threadhandle_t getThreadHandle() { return m_thread_obj->native_handle(); }
+       std::thread::id getThreadId() { return m_thread_obj->get_id(); }
 
        /*
         * Gets the thread return value.
@@ -139,6 +140,11 @@ protected:
        virtual void *run() = 0;
 
 private:
+       std::thread::native_handle_type getThreadHandle()
+               { return m_thread_obj->native_handle(); }
+
+       static void threadProc(Thread *thr);
+
        void *m_retval;
        bool m_joinable;
        std::atomic<bool> m_request_stop;
@@ -148,13 +154,11 @@ private:
 
        std::thread *m_thread_obj;
 
-       static ThreadStartFunc threadProc;
 
 #ifdef _AIX
        // For AIX, there does not exist any mapping from pthread_t to tid_t
        // available to us, so we maintain one ourselves.  This is set on thread start.
        tid_t m_kernel_thread_id;
 #endif
-       Thread(const Thread &) = delete;
 };
 
diff --git a/src/threads.h b/src/threads.h
deleted file mode 100644 (file)
index ea84abd..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-Minetest
-Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
-Copyright (C) 2017 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-#pragma once
-
-///////////////
-#include <thread>
-
-//
-// threadid_t, threadhandle_t
-//
-typedef std::thread::id threadid_t;
-typedef std::thread::native_handle_type threadhandle_t;
-
-//
-// ThreadStartFunc
-//
-typedef void *ThreadStartFunc(void *param);
-
-
-inline threadid_t thr_get_current_thread_id()
-{
-       return std::this_thread::get_id();
-}
-
-inline bool thr_compare_thread_id(threadid_t thr1, threadid_t thr2)
-{
-       return thr1 == thr2;
-}
-
-inline bool thr_is_current_thread(threadid_t thr)
-{
-       return thr_compare_thread_id(thr_get_current_thread_id(), thr);
-}