载入中...
搜索中...
未找到
RuntimeRegistry.cpp
浏览该文件的文档.
32 return registryFailure<R>(DiagnosticCode::StaleHandle, "runtime handle is stale or belongs to another owner epoch");
56std::optional<std::uint32_t> RuntimeSlotStore::findSlot(std::uint32_t index, std::uint32_t generation,
104 return registryFailure<RuntimeSlotCoordinates>(DiagnosticCode::Failed, "runtime registry allocation failed");
116Result<void*> RuntimeSlotStore::pin(std::uint32_t index, std::uint32_t generation, std::uint64_t ownerEpoch) {
119 DiagnosticCode::InvalidArgument, "cannot pin an invalid runtime handle", {}, {}, "runtime.registry"));
125 if (slot.object == nullptr || slot.generation != generation || slot.orphaned) return registryStale<void*>();
127 return registryFailure<void*>(DiagnosticCode::InvariantViolation, "runtime registry pin count exhausted");
150Result<void> RuntimeSlotStore::erase(std::uint32_t index, std::uint32_t generation, std::uint64_t ownerEpoch) {
153 DiagnosticCode::InvalidArgument, "cannot erase an invalid runtime handle", {}, {}, "runtime.registry"));
179 return registryFailure<void>(DiagnosticCode::Failed, "runtime registry release bookkeeping failed");
190bool RuntimeSlotStore::isStale(std::uint32_t index, std::uint32_t generation, std::uint64_t ownerEpoch) const noexcept {
Tag-free slot registry: handles, borrows, unique ownership and keep-alive pins.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
Result< void > erase(std::uint32_t index, std::uint32_t generation, std::uint64_t ownerEpoch)
Destroys the object in a live slot, then advances or retires it.
Definition RuntimeRegistry.cpp:150
void * resolve(std::uint32_t index, std::uint32_t generation, std::uint64_t ownerEpoch) const noexcept
Borrows the live object for these coordinates, or null when stale.
Definition RuntimeRegistry.cpp:108
bool isStale(std::uint32_t index, std::uint32_t generation, std::uint64_t ownerEpoch) const noexcept
Whether a non-invalid handle can no longer resolve.
Definition RuntimeRegistry.cpp:190
Result< void * > pin(std::uint32_t index, std::uint32_t generation, std::uint64_t ownerEpoch)
Keeps one live slot's object alive across erase() and clear().
Definition RuntimeRegistry.cpp:116
Result< RuntimeSlotCoordinates > emplace(void *object)
Stores one object in a fresh or recycled slot.
Definition RuntimeRegistry.cpp:74
std::uint64_t ownerEpoch() const noexcept
Returns the non-reusable lifetime epoch of this store.
Definition RuntimeRegistry.h:229
void unpin(std::uint32_t index, std::uint64_t ownerEpoch) noexcept
Releases one pin, destroying the object when it was the last one on an erased slot.
Definition RuntimeRegistry.cpp:132
void clear()
Destroys every live object and invalidates every prior handle.
Definition RuntimeRegistry.cpp:199
Definition RuntimeRegistry.cpp:19
@ InvalidArgument
@ InvariantViolation
@ Failed
@ StaleHandle
@ Applied
Slot coordinates without the domain tag.
Definition RuntimeRegistry.h:115
std::uint32_t generation
Definition RuntimeRegistry.h:117