From 8331de424a67b137cd83ce817da0fceec647dc2f Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 2 Jan 2013 22:04:03 +0100 Subject: PlaylistInfo: rename class, use std::string --- src/DatabasePrint.cxx | 8 ++++---- src/DatabaseVisitor.hxx | 4 ++-- src/Directory.cxx | 2 +- src/PlaylistDatabase.cxx | 9 ++++----- src/PlaylistInfo.cxx | 46 ------------------------------------------ src/PlaylistInfo.hxx | 17 +++++++++------- src/PlaylistVector.cxx | 30 +++++++++++++-------------- src/PlaylistVector.hxx | 8 +++----- src/UpdateWalk.cxx | 13 +++++++----- src/db/ProxyDatabasePlugin.cxx | 10 +++------ 10 files changed, 49 insertions(+), 98 deletions(-) delete mode 100644 src/PlaylistInfo.cxx (limited to 'src') diff --git a/src/DatabasePrint.cxx b/src/DatabasePrint.cxx index 87e41be8..1e284209 100644 --- a/src/DatabasePrint.cxx +++ b/src/DatabasePrint.cxx @@ -91,19 +91,19 @@ PrintSongFull(struct client *client, song &song) static bool PrintPlaylistBrief(struct client *client, - const playlist_metadata &playlist, + const PlaylistInfo &playlist, const directory &directory) { - print_playlist_in_directory(client, directory, playlist.name); + print_playlist_in_directory(client, directory, playlist.name.c_str()); return true; } static bool PrintPlaylistFull(struct client *client, - const playlist_metadata &playlist, + const PlaylistInfo &playlist, const directory &directory) { - print_playlist_in_directory(client, directory, playlist.name); + print_playlist_in_directory(client, directory, playlist.name.c_str()); if (playlist.mtime > 0) time_print(client, "Last-Modified", playlist.mtime); diff --git a/src/DatabaseVisitor.hxx b/src/DatabaseVisitor.hxx index 10f907ce..c10deae1 100644 --- a/src/DatabaseVisitor.hxx +++ b/src/DatabaseVisitor.hxx @@ -26,11 +26,11 @@ struct directory; struct song; -struct playlist_metadata; +struct PlaylistInfo; typedef std::function VisitDirectory; typedef std::function VisitSong; -typedef std::function VisitPlaylist; typedef std::function VisitString; diff --git a/src/Directory.cxx b/src/Directory.cxx index 59859a0f..84545e54 100644 --- a/src/Directory.cxx +++ b/src/Directory.cxx @@ -307,7 +307,7 @@ directory::Walk(bool recursive, const SongFilter *filter, } if (visit_playlist) { - struct playlist_metadata *i; + PlaylistInfo *i; directory_for_each_playlist(i, this) if (!visit_playlist(*i, *this, error_r)) return false; diff --git a/src/PlaylistDatabase.cxx b/src/PlaylistDatabase.cxx index a2062a51..bbfdf748 100644 --- a/src/PlaylistDatabase.cxx +++ b/src/PlaylistDatabase.cxx @@ -38,20 +38,19 @@ playlist_database_quark(void) void playlist_vector_save(FILE *fp, const struct list_head *pv) { - struct playlist_metadata *pm; + PlaylistInfo *pm; playlist_vector_for_each(pm, pv) fprintf(fp, PLAYLIST_META_BEGIN "%s\n" "mtime: %li\n" "playlist_end\n", - pm->name, (long)pm->mtime); + pm->name.c_str(), (long)pm->mtime); } bool playlist_metadata_load(FILE *fp, struct list_head *pv, const char *name, GString *buffer, GError **error_r) { - struct playlist_metadata pm; - pm.mtime = 0; + PlaylistInfo pm(name, 0); char *line, *colon; const char *value; @@ -77,6 +76,6 @@ playlist_metadata_load(FILE *fp, struct list_head *pv, const char *name, } } - playlist_vector_update_or_add(pv, name, pm.mtime); + playlist_vector_update_or_add(pv, std::move(pm)); return true; } diff --git a/src/PlaylistInfo.cxx b/src/PlaylistInfo.cxx deleted file mode 100644 index 39217879..00000000 --- a/src/PlaylistInfo.cxx +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2003-2013 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. - */ - -#include "config.h" -#include "PlaylistInfo.hxx" - -#include - -#include - -struct playlist_metadata * -playlist_metadata_new(const char *name, time_t mtime) -{ - assert(name != NULL); - - struct playlist_metadata *pm = g_slice_new(struct playlist_metadata); - pm->name = g_strdup(name); - pm->mtime = mtime; - return pm; -} - -void -playlist_metadata_free(struct playlist_metadata *pm) -{ - assert(pm != NULL); - assert(pm->name != NULL); - - g_free(pm->name); - g_slice_free(struct playlist_metadata, pm); -} diff --git a/src/PlaylistInfo.hxx b/src/PlaylistInfo.hxx index 2d21178e..fffafd81 100644 --- a/src/PlaylistInfo.hxx +++ b/src/PlaylistInfo.hxx @@ -23,26 +23,29 @@ #include "check.h" #include "util/list.h" +#include + #include /** * A directory entry pointing to a playlist file. */ -struct playlist_metadata { +struct PlaylistInfo { struct list_head siblings; /** * The UTF-8 encoded name of the playlist file. */ - char *name; + std::string name; time_t mtime; -}; -struct playlist_metadata * -playlist_metadata_new(const char *name, time_t mtime); + template + PlaylistInfo(N &&_name, time_t _mtime) + :name(std::forward(_name)), mtime(_mtime) {} -void -playlist_metadata_free(struct playlist_metadata *pm); + PlaylistInfo(const PlaylistInfo &other) = delete; + PlaylistInfo(PlaylistInfo &&) = default; +}; #endif diff --git a/src/PlaylistVector.cxx b/src/PlaylistVector.cxx index 726a6933..f1f13567 100644 --- a/src/PlaylistVector.cxx +++ b/src/PlaylistVector.cxx @@ -30,50 +30,48 @@ playlist_vector_deinit(struct list_head *pv) { assert(pv != NULL); - struct playlist_metadata *pm, *n; + PlaylistInfo *pm, *n; playlist_vector_for_each_safe(pm, n, pv) - playlist_metadata_free(pm); + delete pm; } -struct playlist_metadata * +PlaylistInfo * playlist_vector_find(struct list_head *pv, const char *name) { assert(holding_db_lock()); assert(pv != NULL); assert(name != NULL); - struct playlist_metadata *pm; + PlaylistInfo *pm; playlist_vector_for_each(pm, pv) - if (strcmp(pm->name, name) == 0) + if (pm->name.compare(name) == 0) return pm; return NULL; } void -playlist_vector_add(struct list_head *pv, - const char *name, time_t mtime) +playlist_vector_add(struct list_head *pv, PlaylistInfo &&pi) { assert(holding_db_lock()); - struct playlist_metadata *pm = playlist_metadata_new(name, mtime); + PlaylistInfo *pm = new PlaylistInfo(std::move(pi)); list_add_tail(&pm->siblings, pv); } bool -playlist_vector_update_or_add(struct list_head *pv, - const char *name, time_t mtime) +playlist_vector_update_or_add(struct list_head *pv, PlaylistInfo &&pi) { assert(holding_db_lock()); - struct playlist_metadata *pm = playlist_vector_find(pv, name); + PlaylistInfo *pm = playlist_vector_find(pv, pi.name.c_str()); if (pm != NULL) { - if (mtime == pm->mtime) + if (pi.mtime == pm->mtime) return false; - pm->mtime = mtime; + pm->mtime = pi.mtime; } else - playlist_vector_add(pv, name, mtime); + playlist_vector_add(pv, std::move(pi)); return true; } @@ -83,11 +81,11 @@ playlist_vector_remove(struct list_head *pv, const char *name) { assert(holding_db_lock()); - struct playlist_metadata *pm = playlist_vector_find(pv, name); + PlaylistInfo *pm = playlist_vector_find(pv, name); if (pm == NULL) return false; list_del(&pm->siblings); - playlist_metadata_free(pm); + delete pm; return true; } diff --git a/src/PlaylistVector.hxx b/src/PlaylistVector.hxx index 30418131..14445315 100644 --- a/src/PlaylistVector.hxx +++ b/src/PlaylistVector.hxx @@ -37,15 +37,14 @@ playlist_vector_deinit(struct list_head *pv); /** * Caller must lock the #db_mutex. */ -struct playlist_metadata * +PlaylistInfo * playlist_vector_find(struct list_head *pv, const char *name); /** * Caller must lock the #db_mutex. */ void -playlist_vector_add(struct list_head *pv, - const char *name, time_t mtime); +playlist_vector_add(struct list_head *pv, PlaylistInfo &&pi); /** * Caller must lock the #db_mutex. @@ -53,8 +52,7 @@ playlist_vector_add(struct list_head *pv, * @return true if the vector or one of its items was modified */ bool -playlist_vector_update_or_add(struct list_head *pv, - const char *name, time_t mtime); +playlist_vector_update_or_add(struct list_head *pv, PlaylistInfo &&pi); /** * Caller must lock the #db_mutex. diff --git a/src/UpdateWalk.cxx b/src/UpdateWalk.cxx index 86034200..a34e0028 100644 --- a/src/UpdateWalk.cxx +++ b/src/UpdateWalk.cxx @@ -159,11 +159,12 @@ purge_deleted_from_directory(struct directory *directory) g_free(path); } - struct playlist_metadata *pm, *np; + PlaylistInfo *pm, *np; directory_for_each_playlist_safe(pm, np, directory) { - if (!directory_child_is_regular(directory, pm->name)) { + if (!directory_child_is_regular(directory, pm->name.c_str())) { db_lock(); - playlist_vector_remove(&directory->playlists, pm->name); + playlist_vector_remove(&directory->playlists, + pm->name.c_str()); db_unlock(); } } @@ -214,9 +215,11 @@ update_playlist_file2(struct directory *directory, if (!playlist_suffix_supported(suffix)) return false; + PlaylistInfo pi(name, st->st_mtime); + db_lock(); - if (playlist_vector_update_or_add(&directory->playlists, name, - st->st_mtime)) + if (playlist_vector_update_or_add(&directory->playlists, + std::move(pi))) modified = true; db_unlock(); return true; diff --git a/src/db/ProxyDatabasePlugin.cxx b/src/db/ProxyDatabasePlugin.cxx index db8e56dd..01b36a6e 100644 --- a/src/db/ProxyDatabasePlugin.cxx +++ b/src/db/ProxyDatabasePlugin.cxx @@ -314,14 +314,10 @@ Visit(const struct mpd_playlist *playlist, if (!visit_playlist) return true; - struct playlist_metadata p; - p.name = g_strdup(mpd_playlist_get_path(playlist)); - p.mtime = mpd_playlist_get_last_modified(playlist); + PlaylistInfo p(mpd_playlist_get_path(playlist), + mpd_playlist_get_last_modified(playlist)); - bool success = visit_playlist(p, detached_root, error_r); - g_free(p.name); - - return success; + return visit_playlist(p, detached_root, error_r); } class ProxyEntity { -- cgit v1.2.3