added object_cache and test
This commit is contained in:
@@ -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_; }
|
||||
|
||||
Reference in New Issue
Block a user