From e98e74213e9a9506dcc5c362de6646d8de097ca3 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Wed, 11 Nov 2015 11:57:54 -0500 Subject: [PATCH] core/tags/genre: Replace constructor with a backwards pointer Signed-off-by: Anna Schumaker --- core/tags/genre.cpp | 17 +++++++---------- core/tags/track.cpp | 2 +- include/core/tags/genre.h | 8 +++----- tests/core/tags/genre.cpp | 26 +++++++++++++------------- 4 files changed, 24 insertions(+), 29 deletions(-) diff --git a/core/tags/genre.cpp b/core/tags/genre.cpp index 70da68d7..f0eb1ed6 100644 --- a/core/tags/genre.cpp +++ b/core/tags/genre.cpp @@ -9,43 +9,40 @@ extern "C" { static struct database genre_db; -genre :: genre() {} - static struct db_entry *genre_alloc(const gchar *name) { struct genre *genre = new struct genre; gchar *lower = string_lowercase(name); + dbe_init(&genre->ge_dbe, genre); genre->ge_name = name; genre->ge_lower = lower; g_free(lower); - return genre; + return &genre->ge_dbe; } static void genre_free(struct db_entry *dbe) { - delete (struct genre *)dbe; + delete GENRE(dbe); } static gchar *genre_key(struct db_entry *dbe) { - struct genre *genre = (struct genre *)dbe; - return g_strdup_printf(genre->ge_name.c_str()); + return g_strdup_printf(GENRE(dbe)->ge_name.c_str()); } static struct db_entry *genre_read(struct file *file) { gchar *name = file_readl(file); - struct genre *genre = (struct genre *)genre_alloc(name); + struct db_entry *dbe = genre_alloc(name); g_free(name); - return genre; + return dbe; } static void genre_write(struct file *file, struct db_entry *dbe) { - struct genre *genre = (struct genre *)dbe; - file_writef(file, "%s", genre->ge_name.c_str()); + file_writef(file, "%s", GENRE(dbe)->ge_name.c_str()); } diff --git a/core/tags/track.cpp b/core/tags/track.cpp index 516dcfb5..189efc1b 100644 --- a/core/tags/track.cpp +++ b/core/tags/track.cpp @@ -131,7 +131,7 @@ static void track_write(struct file *file, struct db_entry *dbe) file_writef(file, "%u %u %u %u %u ", track->tr_library->dbe_index, track->tr_artist->ar_dbe.dbe_index, track->tr_album->al_dbe.dbe_index, - track->tr_genre->dbe_index, + track->tr_genre->ge_dbe.dbe_index, track->tr_track); date_write(file, &track->tr_date); file_writef(file, " %u %u %s\n%s\n", track->tr_count, diff --git a/include/core/tags/genre.h b/include/core/tags/genre.h index 73390171..9389bb34 100644 --- a/include/core/tags/genre.h +++ b/include/core/tags/genre.h @@ -13,15 +13,13 @@ extern "C" { * The Genre tag is used to store the name of genres added * to the tag database. */ -struct genre : public db_entry { -public: +struct genre { std::string ge_name; /* This genre's name. */ std::string ge_lower; /* This genre's name (lowercased). */ - - genre(); /**< Genre tag constructor. */ + struct db_entry ge_dbe; }; -#define GENRE(dbe) ((struct genre *)dbe) +#define GENRE(dbe) ((struct genre *)DBE_DATA(dbe)) /* Called to initialize the genre database. */ diff --git a/tests/core/tags/genre.cpp b/tests/core/tags/genre.cpp index e4cb9c56..b732a73c 100644 --- a/tests/core/tags/genre.cpp +++ b/tests/core/tags/genre.cpp @@ -9,7 +9,7 @@ static void test_verify_empty(struct genre *genre) const struct db_ops *genre_ops = test_genre_ops(); test_equal(genre->ge_name, ""); test_equal(genre->ge_lower, ""); - test_str_equal(genre_ops->dbe_key(genre), ""); + test_str_equal(genre_ops->dbe_key(&genre->ge_dbe), ""); } static void test_verify_vg(struct genre *genre) @@ -17,7 +17,7 @@ static void test_verify_vg(struct genre *genre) const struct db_ops *genre_ops = test_genre_ops(); test_equal(genre->ge_name, "Video Game Music"); test_equal(genre->ge_lower, "video game music"); - test_str_equal(genre_ops->dbe_key(genre), "Video Game Music"); + test_str_equal(genre_ops->dbe_key(&genre->ge_dbe), "Video Game Music"); } static void test_genre() @@ -27,27 +27,27 @@ static void test_genre() unsigned int i; file f; - genre = (struct genre *)genre_ops->dbe_alloc("Video Game Music"); + genre = GENRE(genre_ops->dbe_alloc("Video Game Music")); test_verify_vg(genre); file_init(&f, "genre_tag", 0); file_open(&f, OPEN_WRITE); file_writef(&f, "1 \n1 "); - genre_ops->dbe_write(&f, genre); + genre_ops->dbe_write(&f, &genre->ge_dbe); file_close(&f); - genre_ops->dbe_free(genre); + genre_ops->dbe_free(&genre->ge_dbe); file_open(&f, OPEN_READ); file_readf(&f, "%u", &i); - genre = (struct genre *)genre_ops->dbe_read(&f); + genre = GENRE(genre_ops->dbe_read(&f)); test_verify_empty(genre); - genre_ops->dbe_free(genre); + genre_ops->dbe_free(&genre->ge_dbe); file_readf(&f, "%u", &i); - genre = (struct genre *)genre_ops->dbe_read(&f); + genre = GENRE(genre_ops->dbe_read(&f)); file_close(&f); test_verify_vg(genre); - genre_ops->dbe_free(genre); + genre_ops->dbe_free(&genre->ge_dbe); } static void test_genre_compare() @@ -55,15 +55,15 @@ static void test_genre_compare() const struct db_ops *genre_ops = test_genre_ops(); struct genre *video, *game; - video = (struct genre *)genre_ops->dbe_alloc("Video Game Music"); - game = (struct genre *)genre_ops->dbe_alloc("game music"); + video = GENRE(genre_ops->dbe_alloc("Video Game Music")); + game = GENRE(genre_ops->dbe_alloc("game music")); test_equal(genre_compare(video, video), 0); test_equal(genre_compare(video, game), 1); test_equal(genre_compare(game, video), -1); - genre_ops->dbe_free(video); - genre_ops->dbe_free(game); + genre_ops->dbe_free(&video->ge_dbe); + genre_ops->dbe_free(&game->ge_dbe); } static void test_genere_db()