Merge remote-tracking branches 'neheb/bind', 'neheb/move' and 'neheb/str'

This commit is contained in:
Max Kellermann
2020-02-04 17:03:49 +01:00
17 changed files with 50 additions and 46 deletions

View File

@@ -39,7 +39,6 @@ search_add_to_playlist(const Database &db, const Storage *storage,
const DatabaseSelection &selection)
{
using namespace std::placeholders;
const auto f = std::bind(AddSong, storage,
playlist_path_utf8, _1);
const auto f = [=](auto && arg1) { return AddSong(storage, playlist_path_utf8, arg1); };
db.Visit(selection, f);
}

View File

@@ -50,8 +50,9 @@
#include <mpd/async.h>
#include <cassert>
#include <string>
#include <list>
#include <string>
#include <utility>
class LibmpdclientError final : public std::runtime_error {
enum mpd_error code;
@@ -674,15 +675,15 @@ ProxyDatabase::ReturnSong(const LightSong *_song) const noexcept
static void
Visit(struct mpd_connection *connection, const char *uri,
bool recursive, const SongFilter *filter,
VisitDirectory visit_directory, VisitSong visit_song,
VisitPlaylist visit_playlist);
const VisitDirectory& visit_directory, const VisitSong& visit_song,
const VisitPlaylist& visit_playlist);
static void
Visit(struct mpd_connection *connection,
bool recursive, const SongFilter *filter,
const struct mpd_directory *directory,
VisitDirectory visit_directory, VisitSong visit_song,
VisitPlaylist visit_playlist)
const VisitDirectory& visit_directory, const VisitSong& visit_song,
const VisitPlaylist& visit_playlist)
{
const char *path = mpd_directory_get_path(directory);
@@ -697,7 +698,7 @@ Visit(struct mpd_connection *connection,
if (recursive)
Visit(connection, path, recursive, filter,
visit_directory, visit_song, visit_playlist);
visit_directory, std::move(visit_song), std::move(visit_playlist));
}
gcc_pure
@@ -710,7 +711,7 @@ Match(const SongFilter *filter, const LightSong &song) noexcept
static void
Visit(const SongFilter *filter,
const mpd_song *_song,
VisitSong visit_song)
const VisitSong& visit_song)
{
if (!visit_song)
return;
@@ -722,7 +723,7 @@ Visit(const SongFilter *filter,
static void
Visit(const struct mpd_playlist *playlist,
VisitPlaylist visit_playlist)
const VisitPlaylist& visit_playlist)
{
if (!visit_playlist)
return;
@@ -778,8 +779,8 @@ ReceiveEntities(struct mpd_connection *connection) noexcept
static void
Visit(struct mpd_connection *connection, const char *uri,
bool recursive, const SongFilter *filter,
VisitDirectory visit_directory, VisitSong visit_song,
VisitPlaylist visit_playlist)
const VisitDirectory& visit_directory, const VisitSong& visit_song,
const VisitPlaylist& visit_playlist)
{
if (!mpd_send_list_meta(connection, uri))
ThrowError(connection);
@@ -813,7 +814,7 @@ Visit(struct mpd_connection *connection, const char *uri,
static void
SearchSongs(struct mpd_connection *connection,
const DatabaseSelection &selection,
VisitSong visit_song)
const VisitSong& visit_song)
try {
assert(selection.recursive);
assert(visit_song);

View File

@@ -220,8 +220,8 @@ Directory::Sort() noexcept
void
Directory::Walk(bool recursive, const SongFilter *filter,
VisitDirectory visit_directory, VisitSong visit_song,
VisitPlaylist visit_playlist) const
const VisitDirectory& visit_directory, const VisitSong& visit_song,
const VisitPlaylist& visit_playlist) const
{
if (IsMount()) {
assert(IsEmpty());

View File

@@ -284,8 +284,8 @@ public:
* Caller must lock #db_mutex.
*/
void Walk(bool recursive, const SongFilter *match,
VisitDirectory visit_directory, VisitSong visit_song,
VisitPlaylist visit_playlist) const;
const VisitDirectory& visit_directory, const VisitSong& visit_song,
const VisitPlaylist& visit_playlist) const;
gcc_pure
LightDirectory Export() const noexcept;

View File

@@ -41,6 +41,7 @@
#include "util/SplitString.hxx"
#include <string>
#include <utility>
#include <assert.h>
#include <string.h>
@@ -107,9 +108,9 @@ private:
void VisitServer(const ContentDirectoryService &server,
std::forward_list<std::string> &&vpath,
const DatabaseSelection &selection,
VisitDirectory visit_directory,
VisitSong visit_song,
VisitPlaylist visit_playlist) const;
const VisitDirectory& visit_directory,
const VisitSong& visit_song,
const VisitPlaylist& visit_playlist) const;
/**
* Run an UPnP search according to MPD parameters, and
@@ -118,7 +119,7 @@ private:
void SearchSongs(const ContentDirectoryService &server,
const char *objid,
const DatabaseSelection &selection,
VisitSong visit_song) const;
const VisitSong& visit_song) const;
UPnPDirContent SearchSongs(const ContentDirectoryService &server,
const char *objid,
@@ -311,7 +312,7 @@ UpnpDatabase::SearchSongs(const ContentDirectoryService &server,
static void
visitSong(const UPnPDirObject &meta, const char *path,
const DatabaseSelection &selection,
VisitSong visit_song)
const VisitSong& visit_song)
{
if (!visit_song)
return;
@@ -339,7 +340,7 @@ void
UpnpDatabase::SearchSongs(const ContentDirectoryService &server,
const char *objid,
const DatabaseSelection &selection,
VisitSong visit_song) const
const VisitSong& visit_song) const
{
if (!visit_song)
return;
@@ -440,13 +441,13 @@ UpnpDatabase::Namei(const ContentDirectoryService &server,
static void
VisitItem(const UPnPDirObject &object, const char *uri,
const DatabaseSelection &selection,
VisitSong visit_song, VisitPlaylist visit_playlist)
const VisitSong& visit_song, const VisitPlaylist& visit_playlist)
{
assert(object.type == UPnPDirObject::Type::ITEM);
switch (object.item_class) {
case UPnPDirObject::ItemClass::MUSIC:
visitSong(object, uri, selection, visit_song);
visitSong(object, uri, selection, std::move(visit_song));
break;
case UPnPDirObject::ItemClass::PLAYLIST:
@@ -469,9 +470,9 @@ VisitItem(const UPnPDirObject &object, const char *uri,
static void
VisitObject(const UPnPDirObject &object, const char *uri,
const DatabaseSelection &selection,
VisitDirectory visit_directory,
VisitSong visit_song,
VisitPlaylist visit_playlist)
const VisitDirectory& visit_directory,
const VisitSong& visit_song,
const VisitPlaylist& visit_playlist)
{
switch (object.type) {
case UPnPDirObject::Type::UNKNOWN:
@@ -486,7 +487,7 @@ VisitObject(const UPnPDirObject &object, const char *uri,
case UPnPDirObject::Type::ITEM:
VisitItem(object, uri, selection,
visit_song, visit_playlist);
std::move(visit_song), std::move(visit_playlist));
break;
}
}
@@ -497,9 +498,9 @@ void
UpnpDatabase::VisitServer(const ContentDirectoryService &server,
std::forward_list<std::string> &&vpath,
const DatabaseSelection &selection,
VisitDirectory visit_directory,
VisitSong visit_song,
VisitPlaylist visit_playlist) const
const VisitDirectory& visit_directory,
const VisitSong& visit_song,
const VisitPlaylist& visit_playlist) const
{
/* If the path begins with rootid, we know that this is a
song, not a directory (because that's how we set things