From 8a8b306f3d9ff5991f96a9ba8796206e84da42a1 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Thu, 9 Apr 2015 15:39:32 +0200 Subject: [PATCH] Generalize a bit --- CachingStore.h | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/CachingStore.h b/CachingStore.h index 0e19159a..bfaeae87 100644 --- a/CachingStore.h +++ b/CachingStore.h @@ -44,9 +44,9 @@ public: Key _key; }; - std::unique_ptr add(const Key &key, std::unique_ptr resource); - std::unique_ptr load(const Key &key); - void remove(const Key &key, std::unique_ptr block); + std::unique_ptr add(const Key &key, std::unique_ptr resource); + std::unique_ptr load(const Key &key); + void remove(const Key &key, std::unique_ptr block); private: class OpenResource { @@ -80,8 +80,8 @@ private: std::map _openResources; std::map>> _resourcesToRemove; - std::unique_ptr _add(const Key &key, std::unique_ptr resource); - std::unique_ptr _createCachedResourceRef(Resource *resource, const Key &key); + std::unique_ptr _add(const Key &key, std::unique_ptr resource); + std::unique_ptr _createCachedResourceRef(Resource *resource, const Key &key); void release(const Key &key); friend class CachedResource; @@ -90,42 +90,42 @@ private: }; template -std::unique_ptr CachingStore::add(const Key &key, std::unique_ptr resource) { +std::unique_ptr CachingStore::add(const Key &key, std::unique_ptr resource) { std::lock_guard lock(_mutex); return _add(key, std::move(resource)); } template -std::unique_ptr CachingStore::_add(const Key &key, std::unique_ptr resource) { +std::unique_ptr CachingStore::_add(const Key &key, std::unique_ptr resource) { auto insertResult = _openResources.emplace(key, std::move(resource)); assert(true == insertResult.second); return _createCachedResourceRef(insertResult.first->second.getReference(), key); } template -std::unique_ptr CachingStore::_createCachedResourceRef(Resource *resource, const Key &key) { +std::unique_ptr CachingStore::_createCachedResourceRef(Resource *resource, const Key &key) { auto resourceRef = std::make_unique(resource); resourceRef->init(this, key); return std::move(resourceRef); } template -std::unique_ptr CachingStore::load(const Key &key) { +std::unique_ptr CachingStore::load(const Key &key) { std::lock_guard lock(_mutex); auto found = _openResources.find(key); if (found == _openResources.end()) { - auto resource = _baseStore->loadFromBaseStore(key); - if (resource.get() == nullptr) { - return nullptr; - } - return _add(key, std::move(resource)); + auto resource = _baseStore->loadFromBaseStore(key); + if (resource.get() == nullptr) { + return nullptr; + } + return _add(key, std::move(resource)); } else { - return _createCachedResourceRef(found->second.getReference(), key); + return _createCachedResourceRef(found->second.getReference(), key); } } template -void CachingStore::remove(const Key &key, std::unique_ptr resource) { +void CachingStore::remove(const Key &key, std::unique_ptr resource) { auto insertResult = _resourcesToRemove.emplace(key, std::promise>()); assert(true == insertResult.second); resource.reset(); @@ -143,11 +143,11 @@ void CachingStore::release(const Key &key) { assert (found != _openResources.end()); found->second.releaseReference(); if (found->second.refCountIsZero()) { - auto foundToRemove = _resourcesToRemove.find(key); - if (foundToRemove != _resourcesToRemove.end()) { - foundToRemove->second.set_value(found->second.moveResourceOut()); - } - _openResources.erase(found); + auto foundToRemove = _resourcesToRemove.find(key); + if (foundToRemove != _resourcesToRemove.end()) { + foundToRemove->second.set_value(found->second.moveResourceOut()); + } + _openResources.erase(found); } }