mirror of https://github.com/AxioDL/logvisor.git
Add nxstl mutex to logvisor
This commit is contained in:
parent
82f1df9c40
commit
79506228ad
|
@ -10,6 +10,10 @@
|
|||
#include <memory>
|
||||
#include <mutex>
|
||||
|
||||
#ifdef __SWITCH__
|
||||
#include "nxstl/mutex"
|
||||
#endif
|
||||
|
||||
extern "C" void logvisorBp();
|
||||
|
||||
namespace logvisor
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
#ifndef _NXSTL_MUTEX
|
||||
#define _NXSTL_MUTEX 1
|
||||
#ifdef __SWITCH__
|
||||
#include <switch/kernel/mutex.h>
|
||||
|
||||
namespace std _GLIBCXX_VISIBILITY(default)
|
||||
{
|
||||
|
||||
// Common base class for std::mutex
|
||||
class __mutex_base
|
||||
{
|
||||
protected:
|
||||
typedef Mutex __native_type;
|
||||
|
||||
__native_type _M_mutex = {};
|
||||
|
||||
constexpr __mutex_base() noexcept = default;
|
||||
|
||||
__mutex_base(const __mutex_base&) = delete;
|
||||
__mutex_base& operator=(const __mutex_base&) = delete;
|
||||
};
|
||||
|
||||
/// The standard mutex type.
|
||||
class mutex : private __mutex_base
|
||||
{
|
||||
public:
|
||||
typedef __native_type* native_handle_type;
|
||||
|
||||
constexpr mutex() noexcept = default;
|
||||
~mutex() = default;
|
||||
|
||||
mutex(const mutex&) = delete;
|
||||
mutex& operator=(const mutex&) = delete;
|
||||
|
||||
void
|
||||
lock()
|
||||
{
|
||||
mutexLock(&_M_mutex);
|
||||
}
|
||||
|
||||
bool
|
||||
try_lock() noexcept
|
||||
{
|
||||
return mutexTryLock(&_M_mutex);
|
||||
}
|
||||
|
||||
void
|
||||
unlock()
|
||||
{
|
||||
mutexUnlock(&_M_mutex);
|
||||
}
|
||||
|
||||
native_handle_type
|
||||
native_handle() noexcept
|
||||
{ return &_M_mutex; }
|
||||
};
|
||||
|
||||
// Common base class for std::recursive_mutex
|
||||
class __recursive_mutex_base
|
||||
{
|
||||
protected:
|
||||
typedef RMutex __native_type;
|
||||
|
||||
__recursive_mutex_base(const __recursive_mutex_base&) = delete;
|
||||
__recursive_mutex_base& operator=(const __recursive_mutex_base&) = delete;
|
||||
|
||||
__native_type _M_mutex = {};
|
||||
|
||||
__recursive_mutex_base() = default;
|
||||
};
|
||||
|
||||
/// The standard recursive mutex type.
|
||||
class recursive_mutex : private __recursive_mutex_base
|
||||
{
|
||||
public:
|
||||
typedef __native_type* native_handle_type;
|
||||
|
||||
constexpr recursive_mutex() = default;
|
||||
~recursive_mutex() = default;
|
||||
|
||||
recursive_mutex(const recursive_mutex&) = delete;
|
||||
recursive_mutex& operator=(const recursive_mutex&) = delete;
|
||||
|
||||
void
|
||||
lock()
|
||||
{
|
||||
rmutexLock(&_M_mutex);
|
||||
}
|
||||
|
||||
bool
|
||||
try_lock() noexcept
|
||||
{
|
||||
return rmutexTryLock(&_M_mutex);
|
||||
}
|
||||
|
||||
void
|
||||
unlock()
|
||||
{
|
||||
rmutexUnlock(&_M_mutex);
|
||||
}
|
||||
|
||||
native_handle_type
|
||||
native_handle() noexcept
|
||||
{ return &_M_mutex; }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
Loading…
Reference in New Issue