summaryrefslogtreecommitdiff
path: root/src/storage
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2018-01-02 16:18:34 +0100
committerMax Kellermann <max@musicpd.org>2018-01-02 16:18:34 +0100
commitdcd483bd99446622c8fde6ad3e0df50ed40b4164 (patch)
tree86909c764f7ba4b093f9f042f39c2839ae31a7ce /src/storage
parent3c5e4e2788c7dcfa9d29c383c77396f9a3ffd4fa (diff)
storage/Composite: use std::unique_ptr<Storage>
Diffstat (limited to 'src/storage')
-rw-r--r--src/storage/CompositeStorage.cxx16
-rw-r--r--src/storage/CompositeStorage.hxx13
-rw-r--r--src/storage/StorageState.cxx2
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;
}