pars 0.2.1
Loading...
Searching...
No Matches
pars::app::resources< key_t, resource_t, mutex_t > Class Template Reference

#include <resources.h>

Public Types

using key_type = key_t
 
using resource_type = resource_t
 
using mutex_type = mutex_t
 

Public Member Functions

 resources ()
 
std::size_t count ()
 
bool contains (const key_type key)
 
template<class... args_t>
auto find_or_emplace (const key_type key, args_t &&... args)
 
template<class... args_t>
auto emplace (const key_type key, args_t &&... args)
 
auto locked_resource (const key_type k) -> locked< resource_type, mutex_type, key_type >
 
void delete_resource (key_type k)
 

Detailed Description

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
class pars::app::resources< key_t, resource_t, mutex_t >

Definition at line 82 of file resources.h.

Member Typedef Documentation

◆ key_type

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
using pars::app::resources< key_t, resource_t, mutex_t >::key_type = key_t

Definition at line 85 of file resources.h.

◆ mutex_type

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
using pars::app::resources< key_t, resource_t, mutex_t >::mutex_type = mutex_t

Definition at line 87 of file resources.h.

◆ resource_type

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
using pars::app::resources< key_t, resource_t, mutex_t >::resource_type = resource_t

Definition at line 86 of file resources.h.

Constructor & Destructor Documentation

◆ resources()

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
pars::app::resources< key_t, resource_t, mutex_t >::resources ( )
inline

Definition at line 89 of file resources.h.

89{}

Member Function Documentation

◆ contains()

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
bool pars::app::resources< key_t, resource_t, mutex_t >::contains ( const key_type key)
inline

Definition at line 98 of file resources.h.

99 {
100 auto guard = std::lock_guard{mtx_m};
101
102 return resources_m.contains(key);
103 }
bool contains(const key_type key)
Definition resources.h:98

◆ count()

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
std::size_t pars::app::resources< key_t, resource_t, mutex_t >::count ( )
inline

Definition at line 91 of file resources.h.

92 {
93 auto guard = std::lock_guard{mtx_m};
94
95 return resources_m.size();
96 }

◆ delete_resource()

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
void pars::app::resources< key_t, resource_t, mutex_t >::delete_resource ( key_type k)
inline

Definition at line 145 of file resources.h.

146 {
147 auto guard = std::lock_guard{mtx_m};
148
149 {
150 auto guard = std::lock_guard{mtxs_m.at(k)};
151
152 resources_m.erase(k);
153 }
154
155 mtxs_m.erase(k);
156 }

◆ emplace()

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
template<class... args_t>
auto pars::app::resources< key_t, resource_t, mutex_t >::emplace ( const key_type key,
args_t &&... args )
inline

Definition at line 114 of file resources.h.

115 {
116 auto guard = std::lock_guard{mtx_m};
117
118 auto mtx = mtxs_m.try_emplace(key);
119
120 if (!mtx.second)
122 "Unable to emplace a new Resource Mutex [key: 0x{:X}]", key));
123
124 auto res = resources_m.try_emplace(key, std::forward<args_t>(args)...);
125
126 if (!res.second)
127 {
128 mtxs_m.erase(mtx.first);
129
130 throw std::runtime_error(
131 std::format("Unable to emplace a new Resource [key: 0x{:X}]", key));
132 }
133
134 pars::debug(SL, lf::app, "Emplaced Resource [key: 0x{:X}]", key);
135
136 return locked{lockable{res.first->second, mtx.first->second}, key};
137 }
void debug(spdlog::source_loc loc, pars::lf lf, spdlog::format_string_t< args_t... > fmt, args_t &&... args)
Definition log.h:129

References pars::app, pars::debug(), and SL.

Referenced by find_or_emplace().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ find_or_emplace()

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
template<class... args_t>
auto pars::app::resources< key_t, resource_t, mutex_t >::find_or_emplace ( const key_type key,
args_t &&... args )
inline

Definition at line 106 of file resources.h.

107 {
108 if (resources_m.contains(key))
109 return find_locked(key, resources_m);
110 return emplace(key, std::forward<args>(args)...);
111 }
auto emplace(const key_type key, args_t &&... args)
Definition resources.h:114

References emplace().

Here is the call graph for this function:

◆ locked_resource()

template<typename key_t, typename resource_t, typename mutex_t = std::mutex>
auto pars::app::resources< key_t, resource_t, mutex_t >::locked_resource ( const key_type k) -> locked<resource_type, mutex_type, key_type>
inline

Definition at line 139 of file resources.h.

141 {
142 return find_locked(k, resources_m);
143 }

The documentation for this class was generated from the following file: