37#ifndef SCOPED_RESOURCE_HPP
38#define SCOPED_RESOURCE_HPP
50namespace siddiqsoft::arrp
132 template <
typename T>
137 template <
typename U,
typename SRT, u
int8_t IC>
138 requires((IC <= resource_pool_limits::MaxCapacity)) && NonNumericMoveConstructible<U> &&
139 std::derived_from<SRT, scoped_resource<U>>
140 friend class resource_pool;
247 :
m_rsrc(std::move(src.m_rsrc))
252 src.m_putback_callback = {};
253 src.m_is_valid =
false;
287 m_rsrc = std::move(src.m_rsrc);
292 src.m_putback_callback = {};
293 src.m_is_valid =
false;
357 auto operator*() -> T& {
return m_rsrc; }
359 operator T&() {
return m_rsrc; }
436#if defined(NLOHMANN_JSON_VERSION_MAJOR)
437 nlohmann::json to_json()
const
439 return {{
"_typver",
"siddiqsoft.arrp.scoped_resource/0.0.0"}, {
"capacity",
m_is_valid}, {
"value",
m_rsrc}};
RAII wrapper for managing resource lifecycle with automatic return to pool.
scoped_resource()=delete
Default constructor is deleted.
bool m_is_valid
Tracks whether the resource is valid and should be returned to pool.
std::function< void(T &&)> m_putback_callback
Callback function to return the resource to the pool.
T m_rsrc
The actual resource being wrapped.
scoped_resource(const T &)=delete
Copy constructor is deleted.
scoped_resource & operator=(const scoped_resource &)=delete
Copy assignment operator is deleted.
Concept for types that are move-constructible but not arithmetic.