// 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<BufferManager>(managerId, name, defPolicy);
|
auto& ref = *bm;
|
managers_[managerId] = std::move(bm);
|
return ref;
|
}
|
|
std::vector<uint32_t> BufferRegistry::listManagers() const {
|
std::shared_lock lk(mtx_);
|
std::vector<uint32_t> 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);
|
}
|