summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/db/plugins/simple/Directory.cxx4
-rw-r--r--src/db/plugins/simple/ExportedSong.hxx35
-rw-r--r--src/db/plugins/simple/SimpleDatabasePlugin.cxx10
-rw-r--r--src/db/plugins/simple/SimpleDatabasePlugin.hxx4
-rw-r--r--src/db/plugins/simple/Song.cxx5
-rw-r--r--src/db/plugins/simple/Song.hxx4
6 files changed, 49 insertions, 13 deletions
diff --git a/src/db/plugins/simple/Directory.cxx b/src/db/plugins/simple/Directory.cxx
index 1b34655bd..1465922eb 100644
--- a/src/db/plugins/simple/Directory.cxx
+++ b/src/db/plugins/simple/Directory.cxx
@@ -18,11 +18,11 @@
*/
#include "Directory.hxx"
+#include "ExportedSong.hxx"
#include "SongSort.hxx"
#include "Song.hxx"
#include "Mount.hxx"
#include "db/LightDirectory.hxx"
-#include "song/LightSong.hxx"
#include "db/Uri.hxx"
#include "db/DatabaseLock.hxx"
#include "db/Interface.hxx"
@@ -234,7 +234,7 @@ Directory::Walk(bool recursive, const SongFilter *filter,
if (visit_song) {
for (auto &song : songs){
- const LightSong song2 = song.Export();
+ const auto song2 = song.Export();
if (filter == nullptr || filter->Match(song2))
visit_song(song2);
}
diff --git a/src/db/plugins/simple/ExportedSong.hxx b/src/db/plugins/simple/ExportedSong.hxx
new file mode 100644
index 000000000..6f2f8bd84
--- /dev/null
+++ b/src/db/plugins/simple/ExportedSong.hxx
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2003-2021 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPD_DB_SIMPLE_EXPORTED_SONG_HXX
+#define MPD_DB_SIMPLE_EXPORTED_SONG_HXX
+
+#include "song/LightSong.hxx"
+
+/**
+ * The return type for Song::Export(). In addition to implementing
+ * #LightSong, it hold allocations necessary to represent the #Song as
+ * a #LightSong, e.g. a merged #Tag.
+ */
+class ExportedSong : public LightSong {
+public:
+ using LightSong::LightSong;
+};
+
+#endif
diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.cxx b/src/db/plugins/simple/SimpleDatabasePlugin.cxx
index af01d4b45..1e126f3da 100644
--- a/src/db/plugins/simple/SimpleDatabasePlugin.cxx
+++ b/src/db/plugins/simple/SimpleDatabasePlugin.cxx
@@ -238,20 +238,20 @@ SimpleDatabase::GetSong(std::string_view uri) const
throw DatabaseError(DatabaseErrorCode::NOT_FOUND,
"No such song");
- light_song.Construct(song->Export());
+ exported_song.Construct(song->Export());
#ifndef NDEBUG
++borrowed_song_count;
#endif
- return &light_song.Get();
+ return &exported_song.Get();
}
void
SimpleDatabase::ReturnSong([[maybe_unused]] const LightSong *song) const noexcept
{
assert(song != nullptr);
- assert(song == prefixed_light_song || song == &light_song.Get());
+ assert(song == prefixed_light_song || song == &exported_song.Get());
if (prefixed_light_song != nullptr) {
delete prefixed_light_song;
@@ -262,7 +262,7 @@ SimpleDatabase::ReturnSong([[maybe_unused]] const LightSong *song) const noexcep
--borrowed_song_count;
#endif
- light_song.Destruct();
+ exported_song.Destruct();
}
}
@@ -316,7 +316,7 @@ SimpleDatabase::Visit(const DatabaseSelection &selection,
if (visit_song) {
Song *song = r.directory->FindSong(r.rest);
if (song != nullptr) {
- const LightSong song2 = song->Export();
+ const auto song2 = song->Export();
if (selection.Match(song2))
visit_song(song2);
diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.hxx b/src/db/plugins/simple/SimpleDatabasePlugin.hxx
index a2245faa1..4fe68014e 100644
--- a/src/db/plugins/simple/SimpleDatabasePlugin.hxx
+++ b/src/db/plugins/simple/SimpleDatabasePlugin.hxx
@@ -20,10 +20,10 @@
#ifndef MPD_SIMPLE_DATABASE_PLUGIN_HXX
#define MPD_SIMPLE_DATABASE_PLUGIN_HXX
+#include "ExportedSong.hxx"
#include "db/Interface.hxx"
#include "db/Ptr.hxx"
#include "fs/AllocatedPath.hxx"
-#include "song/LightSong.hxx"
#include "util/Manual.hxx"
#include "util/Compiler.h"
#include "config.h"
@@ -63,7 +63,7 @@ class SimpleDatabase : public Database {
/**
* A buffer for GetSong().
*/
- mutable Manual<LightSong> light_song;
+ mutable Manual<ExportedSong> exported_song;
#ifndef NDEBUG
mutable unsigned borrowed_song_count;
diff --git a/src/db/plugins/simple/Song.cxx b/src/db/plugins/simple/Song.cxx
index 03ec19f50..519a1a3d7 100644
--- a/src/db/plugins/simple/Song.cxx
+++ b/src/db/plugins/simple/Song.cxx
@@ -18,6 +18,7 @@
*/
#include "Song.hxx"
+#include "ExportedSong.hxx"
#include "Directory.hxx"
#include "tag/Tag.hxx"
#include "song/DetachedSong.hxx"
@@ -53,10 +54,10 @@ Song::GetURI() const noexcept
}
}
-LightSong
+ExportedSong
Song::Export() const noexcept
{
- LightSong dest(filename.c_str(), tag);
+ ExportedSong dest(filename.c_str(), tag);
if (!parent.IsRoot())
dest.directory = parent.GetPath();
if (!target.empty())
diff --git a/src/db/plugins/simple/Song.hxx b/src/db/plugins/simple/Song.hxx
index 8750a91b3..eb425dc5c 100644
--- a/src/db/plugins/simple/Song.hxx
+++ b/src/db/plugins/simple/Song.hxx
@@ -32,8 +32,8 @@
#include <string>
struct StringView;
-struct LightSong;
struct Directory;
+class ExportedSong;
class DetachedSong;
class Storage;
class ArchiveFile;
@@ -153,7 +153,7 @@ struct Song {
std::string GetURI() const noexcept;
gcc_pure
- LightSong Export() const noexcept;
+ ExportedSong Export() const noexcept;
};
typedef boost::intrusive::list<Song,