diff --git a/storm/thread/CSRWLock.cpp b/storm/thread/CSRWLock.cpp index 21e380d..69da98f 100644 --- a/storm/thread/CSRWLock.cpp +++ b/storm/thread/CSRWLock.cpp @@ -1,5 +1,27 @@ #include "storm/thread/CSRWLock.hpp" +CSRWLock::CSRWLock() { +#if defined(WHOA_SYSTEM_WIN) + // TODO + SRWLock::SURWLockInitialize(&this->m_opaqueData); +#endif + +#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX) + pthread_rwlock_init(&this->m_lock, nullptr); +#endif +} + +CSRWLock::~CSRWLock() { +#if defined(WHOA_SYSTEM_WIN) + SRWLock::SURWLockDelete(&this->m_opaqueData); + // TODO +#endif + +#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX) + pthread_rwlock_destroy(&this->m_lock); +#endif +} + void CSRWLock::Enter(int32_t forwriting) { #if defined(WHOA_SYSTEM_WIN) SRWLock::SURWLockEnter(&this->m_opaqueData, forwriting); diff --git a/storm/thread/CSRWLock.hpp b/storm/thread/CSRWLock.hpp index bcdd5f2..0644238 100644 --- a/storm/thread/CSRWLock.hpp +++ b/storm/thread/CSRWLock.hpp @@ -23,6 +23,8 @@ class CSRWLock { #endif // Member functions + CSRWLock(); + ~CSRWLock(); void Enter(int32_t forwriting); void Leave(int32_t fromwriting); }; diff --git a/storm/thread/win/SRWLock.cpp b/storm/thread/win/SRWLock.cpp index 4359f85..7f18769 100644 --- a/storm/thread/win/SRWLock.cpp +++ b/storm/thread/win/SRWLock.cpp @@ -8,6 +8,14 @@ void SRWLock::SUNNLockLeave(volatile SUNNLOCK* sunnlock) { // TODO } +void SRWLock::SURWLockInitialize(volatile SRWLock::SURWLOCK* surwlock) { + // TODO +} + +void SRWLock::SURWLockDelete(volatile SRWLock::SURWLOCK* surwlock) { + // TODO +} + void SRWLock::SURWLockEnter(volatile SURWLOCK* surwlock, int32_t forwriting) { // TODO } diff --git a/storm/thread/win/SRWLock.hpp b/storm/thread/win/SRWLock.hpp index e556271..56706e8 100644 --- a/storm/thread/win/SRWLock.hpp +++ b/storm/thread/win/SRWLock.hpp @@ -19,6 +19,8 @@ class SRWLock { // Static functions static void SUNNLockEnter(volatile SUNNLOCK* sunnlock); static void SUNNLockLeave(volatile SUNNLOCK* sunnlock); + static void SURWLockInitialize(volatile SURWLOCK* surwlock); + static void SURWLockDelete(volatile SURWLOCK* surwlock); static void SURWLockEnter(volatile SURWLOCK* surwlock, int32_t forwriting); static void SURWLockLeave(volatile SURWLOCK* surwlock, int32_t fromwriting); };