Files
factory-hole-core/include/Util/ResourceAccess.h
2026-02-09 00:53:38 +09:00

41 lines
819 B
C++

#pragma once
#include "core/os/mutex.h"
#include "core/object/ref_counted.h"
template <typename T, typename LockT>
class ResourceAccess final
{
public:
ResourceAccess(T& resource, LockT& lock)
: Resource{ resource }
, Lock{ lock }
{
Lock.lock();
}
~ResourceAccess()
{
if (validLock) Lock.unlock();
}
ResourceAccess(const ResourceAccess& other) = delete;
ResourceAccess& operator=(const ResourceAccess& other) = delete;
ResourceAccess& operator=(ResourceAccess&& other) noexcept = delete;
ResourceAccess(ResourceAccess&& other) noexcept
: Resource{ other.Resource }
, Lock{ other.Lock }
, validLock{ true }
{
other.validLock = false;
}
public:
T& GetResource() { return Resource; }
T* operator->() { return &Resource; }
private:
T& Resource;
LockT& Lock;
bool validLock{ true };
};