30 std::filesystem::path
root;
48 if (!
lock_.owns_lock())
throw std::logic_error(
"unclaimed catalog owner");
54 throw std::logic_error(
"invalid catalog owner installation");
61 std::unique_lock<std::mutex>
lock_;
73 auto entry =
locate(catalog, root,
false);
74 if (!entry)
return {};
75 std::lock_guard lock(entry->mutex);
84 std::filesystem::path
const & root, F && produce)
const {
85 auto entry =
locate(catalog, root,
true);
86 std::lock_guard lock(entry->mutex);
88 pointer value = std::invoke(std::forward<F>(produce));
89 if (!value)
throw std::logic_error(
"null catalog owner binding");
90 entry->value = std::move(value);
97 mutable std::vector<std::shared_ptr<slot>>
entries_;
99 std::shared_ptr<slot>
locate(
object_id const & catalog, std::filesystem::path
const & root,
bool create)
const {
100 std::lock_guard lock(
mutex_);
102 if (entry->catalog == catalog && entry->root == root)
return entry;
103 if (!create)
return {};
104 auto entry = std::make_shared<slot>(catalog, root);
Definition active_engine.h:18
Declares Everett's object path support.
Definition catalog_bindings.h:41
std::unique_lock< std::mutex > lock_
Definition catalog_bindings.h:61
bool try_lock()
Definition catalog_bindings.h:46
producer(producer &&) noexcept=default
void install(pointer value)
Definition catalog_bindings.h:52
producer(producer const &)=delete
producer(std::shared_ptr< slot > entry)
Definition catalog_bindings.h:62
pointer value() const
Definition catalog_bindings.h:47
std::shared_ptr< slot > entry_
Definition catalog_bindings.h:60
producer & operator=(producer const &)=delete
void release() noexcept
Definition catalog_bindings.h:51
Definition catalog_bindings.h:28
object_id catalog
Definition catalog_bindings.h:29
pointer value
Definition catalog_bindings.h:32
slot(object_id id, std::filesystem::path path)
Definition catalog_bindings.h:33
std::filesystem::path root
Definition catalog_bindings.h:30
std::mutex mutex
Definition catalog_bindings.h:31
Definition catalog_bindings.h:25
pointer get_or_create(object_id const &catalog, std::filesystem::path const &root, F &&produce) const
Definition catalog_bindings.h:83
producer prepare(object_id const &catalog, std::filesystem::path const &root) const
Definition catalog_bindings.h:65
std::shared_ptr< T const > pointer
Definition catalog_bindings.h:26
pointer find(object_id const &catalog, std::filesystem::path const &root) const
Definition catalog_bindings.h:72
std::shared_ptr< slot > locate(object_id const &catalog, std::filesystem::path const &root, bool create) const
Definition catalog_bindings.h:99
catalog_bindings(catalog_bindings const &)=delete
catalog_bindings & operator=(catalog_bindings const &)=delete
catalog_bindings()=default
std::vector< std::shared_ptr< slot > > entries_
Definition catalog_bindings.h:97
std::mutex mutex_
Definition catalog_bindings.h:96
Definition object_path.h:38