From 050ba302cb5e5a813a4b01785789b2e327491a49 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 8 Aug 2012 20:12:20 +0200 Subject: song: use C++ compiler --- Makefile.am | 6 ++-- src/Song.cxx | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/song.c | 106 -------------------------------------------------------- src/song.h | 4 +++ 4 files changed, 117 insertions(+), 109 deletions(-) create mode 100644 src/Song.cxx delete mode 100644 src/song.c diff --git a/Makefile.am b/Makefile.am index 7641758ac..dc3b04658 100644 --- a/Makefile.am +++ b/Makefile.am @@ -335,7 +335,7 @@ src_mpd_SOURCES = \ src/replay_gain_config.c \ src/replay_gain_info.c \ src/sig_handlers.c \ - src/song.c \ + src/Song.cxx \ src/song_update.c \ src/song_print.c \ src/song_save.c \ @@ -1059,7 +1059,7 @@ test_DumpDatabase_SOURCES = test/DumpDatabase.cxx \ src/Directory.cxx src/directory_save.c \ src/playlist_vector.c src/playlist_database.c \ src/db_lock.c src/db_save.c \ - src/song.c src/song_sort.c src/song_save.c \ + src/Song.cxx src/song_sort.c src/song_save.c \ src/tag.c src/tag_pool.c src/tag_save.c \ src/path.c \ src/locate.c \ @@ -1103,7 +1103,7 @@ test_dump_playlist_SOURCES = test/dump_playlist.c \ src/io_thread.c src/io_thread.h \ src/conf.c src/tokenizer.c src/utils.c src/string_util.c\ src/uri.c \ - src/song.c src/tag.c src/tag_pool.c src/tag_save.c \ + src/Song.cxx src/tag.c src/tag_pool.c src/tag_save.c \ src/tag_handler.c src/tag_file.c \ src/audio_check.c src/pcm_buffer.c \ src/text_input_stream.c src/fifo_buffer.c \ diff --git a/src/Song.cxx b/src/Song.cxx new file mode 100644 index 000000000..006ef8aaa --- /dev/null +++ b/src/Song.cxx @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2003-2011 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 "song.h" +#include "directory.h" + +extern "C" { +#include "tag.h" +} + +#include + +#include + +static struct song * +song_alloc(const char *uri, struct directory *parent) +{ + size_t uri_length; + + assert(uri); + uri_length = strlen(uri); + assert(uri_length); + + struct song *song = (struct song *) + g_malloc(sizeof(*song) - sizeof(song->uri) + uri_length + 1); + + song->tag = nullptr; + memcpy(song->uri, uri, uri_length + 1); + song->parent = parent; + song->mtime = 0; + song->start_ms = song->end_ms = 0; + + return song; +} + +struct song * +song_remote_new(const char *uri) +{ + return song_alloc(uri, nullptr); +} + +struct song * +song_file_new(const char *path, struct directory *parent) +{ + assert((parent == nullptr) == (*path == '/')); + + return song_alloc(path, parent); +} + +struct song * +song_replace_uri(struct song *old_song, const char *uri) +{ + struct song *new_song = song_alloc(uri, old_song->parent); + new_song->tag = old_song->tag; + new_song->mtime = old_song->mtime; + new_song->start_ms = old_song->start_ms; + new_song->end_ms = old_song->end_ms; + g_free(old_song); + return new_song; +} + +void +song_free(struct song *song) +{ + if (song->tag) + tag_free(song->tag); + g_free(song); +} + +char * +song_get_uri(const struct song *song) +{ + assert(song != nullptr); + assert(*song->uri); + + if (!song_in_database(song) || directory_is_root(song->parent)) + return g_strdup(song->uri); + else + return g_strconcat(directory_get_path(song->parent), + "/", song->uri, nullptr); +} + +double +song_get_duration(const struct song *song) +{ + if (song->end_ms > 0) + return (song->end_ms - song->start_ms) / 1000.0; + + if (song->tag == nullptr) + return 0; + + return song->tag->time - song->start_ms / 1000.0; +} diff --git a/src/song.c b/src/song.c deleted file mode 100644 index 21ea59d23..000000000 --- a/src/song.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2003-2011 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 "song.h" -#include "directory.h" -#include "tag.h" - -#include - -#include - -static struct song * -song_alloc(const char *uri, struct directory *parent) -{ - size_t uri_length; - struct song *song; - - assert(uri); - uri_length = strlen(uri); - assert(uri_length); - song = g_malloc(sizeof(*song) - sizeof(song->uri) + uri_length + 1); - - song->tag = NULL; - memcpy(song->uri, uri, uri_length + 1); - song->parent = parent; - song->mtime = 0; - song->start_ms = song->end_ms = 0; - - return song; -} - -struct song * -song_remote_new(const char *uri) -{ - return song_alloc(uri, NULL); -} - -struct song * -song_file_new(const char *path, struct directory *parent) -{ - assert((parent == NULL) == (*path == '/')); - - return song_alloc(path, parent); -} - -struct song * -song_replace_uri(struct song *old_song, const char *uri) -{ - struct song *new_song = song_alloc(uri, old_song->parent); - new_song->tag = old_song->tag; - new_song->mtime = old_song->mtime; - new_song->start_ms = old_song->start_ms; - new_song->end_ms = old_song->end_ms; - g_free(old_song); - return new_song; -} - -void -song_free(struct song *song) -{ - if (song->tag) - tag_free(song->tag); - g_free(song); -} - -char * -song_get_uri(const struct song *song) -{ - assert(song != NULL); - assert(*song->uri); - - if (!song_in_database(song) || directory_is_root(song->parent)) - return g_strdup(song->uri); - else - return g_strconcat(directory_get_path(song->parent), - "/", song->uri, NULL); -} - -double -song_get_duration(const struct song *song) -{ - if (song->end_ms > 0) - return (song->end_ms - song->start_ms) / 1000.0; - - if (song->tag == NULL) - return 0; - - return song->tag->time - song->start_ms / 1000.0; -} diff --git a/src/song.h b/src/song.h index 8b97d45d0..441d8729b 100644 --- a/src/song.h +++ b/src/song.h @@ -58,6 +58,8 @@ struct song { char uri[sizeof(int)]; }; +G_BEGIN_DECLS + /** allocate a new song with a remote URL */ struct song * song_remote_new(const char *uri); @@ -117,4 +119,6 @@ song_is_file(const struct song *song) return song_in_database(song) || song->uri[0] == '/'; } +G_END_DECLS + #endif -- cgit v1.2.3