diff options
author | Max Kellermann <max@musicpd.org> | 2018-01-02 16:18:34 +0100 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2018-01-02 16:18:34 +0100 |
commit | dcd483bd99446622c8fde6ad3e0df50ed40b4164 (patch) | |
tree | 86909c764f7ba4b093f9f042f39c2839ae31a7ce /src/storage | |
parent | 3c5e4e2788c7dcfa9d29c383c77396f9a3ffd4fa (diff) |
storage/Composite: use std::unique_ptr<Storage>
Diffstat (limited to 'src/storage')
-rw-r--r-- | src/storage/CompositeStorage.cxx | 16 | ||||
-rw-r--r-- | src/storage/CompositeStorage.hxx | 13 | ||||
-rw-r--r-- | src/storage/StorageState.cxx | 2 |
3 files changed, 10 insertions, 21 deletions
diff --git a/src/storage/CompositeStorage.cxx b/src/storage/CompositeStorage.cxx index a04ed1ce9..84ee67fc6 100644 --- a/src/storage/CompositeStorage.cxx +++ b/src/storage/CompositeStorage.cxx @@ -103,11 +103,6 @@ NextSegment(const char *&uri_r) } } -CompositeStorage::Directory::~Directory() -{ - delete storage; -} - const CompositeStorage::Directory * CompositeStorage::Directory::Find(const char *uri) const noexcept { @@ -144,8 +139,7 @@ CompositeStorage::Directory::Unmount() noexcept if (storage == nullptr) return false; - delete storage; - storage = nullptr; + storage.reset(); return true; } @@ -210,18 +204,16 @@ CompositeStorage::GetMount(const char *uri) noexcept /* not a mount point */ return nullptr; - return result.directory->storage; + return result.directory->storage.get(); } void -CompositeStorage::Mount(const char *uri, Storage *storage) +CompositeStorage::Mount(const char *uri, std::unique_ptr<Storage> storage) { const std::lock_guard<Mutex> protect(mutex); Directory &directory = root.Make(uri); - if (directory.storage != nullptr) - delete directory.storage; - directory.storage = storage; + directory.storage = std::move(storage); } bool diff --git a/src/storage/CompositeStorage.hxx b/src/storage/CompositeStorage.hxx index 668d55a6a..6bc871bab 100644 --- a/src/storage/CompositeStorage.hxx +++ b/src/storage/CompositeStorage.hxx @@ -25,6 +25,7 @@ #include "thread/Mutex.hxx" #include "Compiler.h" +#include <memory> #include <string> #include <map> @@ -47,13 +48,10 @@ class CompositeStorage final : public Storage { * Other Directory instances may have one, and child * mounts will be "mixed" in. */ - Storage *storage; + std::unique_ptr<Storage> storage; std::map<std::string, Directory> children; - Directory():storage(nullptr) {} - ~Directory(); - gcc_pure bool IsEmpty() const noexcept { return storage == nullptr && children.empty(); @@ -115,7 +113,7 @@ public: VisitMounts(uri, root, t); } - void Mount(const char *uri, Storage *storage); + void Mount(const char *uri, std::unique_ptr<Storage> storage); bool Unmount(const char *uri); /* virtual methods from class Storage */ @@ -133,9 +131,8 @@ private: template<typename T> void VisitMounts(std::string &uri, const Directory &directory, T t) const { - const Storage *const storage = directory.storage; - if (storage != nullptr) - t(uri.c_str(), *storage); + if (directory.storage) + t(uri.c_str(), *directory.storage); if (!uri.empty()) uri.push_back('/'); diff --git a/src/storage/StorageState.cxx b/src/storage/StorageState.cxx index de60954a6..99299f886 100644 --- a/src/storage/StorageState.cxx +++ b/src/storage/StorageState.cxx @@ -120,7 +120,7 @@ storage_state_restore(const char *line, TextFile &file, Instance &instance) } ((CompositeStorage*)instance.storage)->Mount(uri.c_str(), - storage.release()); + std::move(storage)); return true; } |