// BufferRegistry.cpp #include "BufferRegistry.h" BufferManager& BufferRegistry::getOrCreate(uint32_t managerId, const std::string& name, const RetentionPolicy& defPolicy) { std::unique_lock lk(mtx_); auto it = managers_.find(managerId); if (it != managers_.end()) return *it->second; auto bm = std::make_unique(managerId, name, defPolicy); auto& ref = *bm; managers_[managerId] = std::move(bm); return ref; } std::vector BufferRegistry::listManagers() const { std::shared_lock lk(mtx_); std::vector ids; ids.reserve(managers_.size()); for (auto& kv : managers_) ids.push_back(kv.first); return ids; } BufferManager* BufferRegistry::find(uint32_t managerId) { std::shared_lock lk(mtx_); auto it = managers_.find(managerId); return (it == managers_.end()) ? nullptr : it->second.get(); } const BufferManager* BufferRegistry::find(uint32_t managerId) const { std::shared_lock lk(mtx_); auto it = managers_.find(managerId); return (it == managers_.end()) ? nullptr : it->second.get(); } void BufferRegistry::remove(uint32_t managerId) { std::unique_lock lk(mtx_); managers_.erase(managerId); }