// License: Modified MIT (NON-AI) // See the LICENSE file in the root directory for license information. // Copyright 2025 Timothy Prepscius #pragma once namespace tjp::core { template class SharedLockGuard { private: SharedMutex& m; bool locked = true; public: typedef SharedMutex mutex_type; explicit SharedLockGuard(SharedMutex& m_): m(m_) { m.lock_shared(); } SharedLockGuard(SharedMutex& m_,std::adopt_lock_t): m(m_) {} ~SharedLockGuard() { unlock(); } void unlock() { if (!locked) return ; locked = false; m.unlock_shared(); } }; } // namespace