added object_cache and test

This commit is contained in:
2026-02-22 22:36:42 +01:00
parent a2c5bca709
commit e45c38b229
9 changed files with 668 additions and 9 deletions
+17 -1
View File
@@ -44,6 +44,22 @@ public:
, pk_(primary_key_resolver::resolve_object(*obj).pk) {
}
void attach(std::shared_ptr<Type> obj) {
std::lock_guard lock(mutex_);
obj_ = std::move(obj);
if (obj_) {
pk_ = primary_key_resolver::resolve_object(*obj_).pk;
state_.store(object_state::Persistent, std::memory_order_release);
}
}
void invalidate() {
std::lock_guard lock(mutex_);
obj_.reset();
resolver_.reset();
state_.store(object_state::Detached, std::memory_order_release);
}
[[nodiscard]] void *raw_pointer() const { return static_cast<void *>(pointer()); }
Type *operator->() { return pointer(); }
@@ -52,7 +68,7 @@ public:
Type *pointer() const { return resolve(); }
[[nodiscard]] bool empty() const { return resolver_ == nullptr; }
[[nodiscard]] bool empty() const { return !obj_ && resolver_.expired(); }
[[nodiscard]] bool valid() const { return !empty(); }
[[nodiscard]] bool has_primary_key() const { return !pk_.is_null(); }
[[nodiscard]] const utils::identifier &primary_key() const { return pk_; }