#include "thread_win32.hpp"

using cruft::thread::win32::thread;


///////////////////////////////////////////////////////////////////////////////
thread::thread () noexcept
{ ; }


//-----------------------------------------------------------------------------
thread::thread (thread &&rhs) noexcept
{
    std::swap (m_handle, rhs.m_handle);
}


//-----------------------------------------------------------------------------
thread&
thread::operator= (thread &&rhs) noexcept
{
    std::swap (m_handle, rhs.m_handle);
    return *this;
}


///////////////////////////////////////////////////////////////////////////////
void thread::join ()
{
    WaitForSingleObject (m_handle, INFINITE);
}


///////////////////////////////////////////////////////////////////////////////
unsigned int thread::hardware_concurrency (void) noexcept
{
    SYSTEM_INFO res;
    GetNativeSystemInfo (&res);
    return res.dwNumberOfProcessors;
}


///////////////////////////////////////////////////////////////////////////////
void cruft::thread::win32::this_thread::yield (void) noexcept
{
    Sleep (0);
}