From d40457929738639eb502c95f936dd2464cf4f1ee Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Wed, 11 Nov 2015 10:04:03 -0500 Subject: [PATCH] core/tags/artist: Replace constructor with a backwards pointer Signed-off-by: Anna Schumaker --- core/tags/artist.cpp | 17 +++++++---------- core/tags/track.cpp | 2 +- include/core/tags/artist.h | 7 +++---- tests/core/tags/artist.cpp | 26 +++++++++++++------------- 4 files changed, 24 insertions(+), 28 deletions(-) diff --git a/core/tags/artist.cpp b/core/tags/artist.cpp index 1cb22a4e..5953e6aa 100644 --- a/core/tags/artist.cpp +++ b/core/tags/artist.cpp @@ -10,43 +10,40 @@ extern "C" { static struct database artist_db; -artist :: artist() {} - static db_entry *artist_alloc(const gchar *name) { struct artist *artist = new struct artist; gchar *lower = string_lowercase(name); + dbe_init(&artist->ar_dbe, artist); artist->ar_name = name; artist->ar_lower = lower; g_free(lower); - return artist; + return &artist->ar_dbe; } static void artist_free(struct db_entry *dbe) { - delete (struct artist *)dbe; + delete ARTIST(dbe); } static gchar *artist_key(struct db_entry *dbe) { - struct artist *artist = (struct artist *)dbe; - return g_strdup(artist->ar_name.c_str()); + return g_strdup(ARTIST(dbe)->ar_name.c_str()); } struct db_entry *artist_read(struct file *file) { gchar *name = file_readl(file); - struct artist *artist = (struct artist *)artist_alloc(name); + struct db_entry *dbe = artist_alloc(name); g_free(name); - return artist; + return dbe; } static void artist_write(struct file *file, struct db_entry *dbe) { - struct artist *artist = (struct artist *)dbe; - file_writef(file, "%s", artist->ar_name.c_str()); + file_writef(file, "%s", ARTIST(dbe)->ar_name.c_str()); } diff --git a/core/tags/track.cpp b/core/tags/track.cpp index c72a6481..ae972681 100644 --- a/core/tags/track.cpp +++ b/core/tags/track.cpp @@ -129,7 +129,7 @@ static void track_write(struct file *file, struct db_entry *dbe) { struct track *track = (struct track *)dbe; file_writef(file, "%u %u %u %u %u ", track->tr_library->dbe_index, - track->tr_artist->dbe_index, + track->tr_artist->ar_dbe.dbe_index, track->tr_album->al_dbe.dbe_index, track->tr_genre->dbe_index, track->tr_track); diff --git a/include/core/tags/artist.h b/include/core/tags/artist.h index 8053e9f8..399afc5e 100644 --- a/include/core/tags/artist.h +++ b/include/core/tags/artist.h @@ -13,14 +13,13 @@ extern "C" { * The Artist tag is used to store the name of artists added * to the tag database. */ -struct artist : public db_entry { +struct artist { std::string ar_name; /* This artist's name. */ std::string ar_lower; /* This artist's name (lowercased). */ - - artist(); /**< Artist tag constructor. */ + struct db_entry ar_dbe; }; -#define ARTIST(dbe) ((struct artist *)dbe) +#define ARTIST(dbe) ((struct artist *)DBE_DATA(dbe)) /* Called to initialize the artist database. */ diff --git a/tests/core/tags/artist.cpp b/tests/core/tags/artist.cpp index c9ecb114..2db0ecdf 100644 --- a/tests/core/tags/artist.cpp +++ b/tests/core/tags/artist.cpp @@ -9,7 +9,7 @@ static void test_verify_empty(struct artist *artist) const struct db_ops *artist_ops = test_artist_ops(); test_equal(artist->ar_name, ""); test_equal(artist->ar_lower, ""); - test_str_equal(artist_ops->dbe_key(artist), ""); + test_str_equal(artist_ops->dbe_key(&artist->ar_dbe), ""); } static void test_verify_koji(struct artist *artist) @@ -17,7 +17,7 @@ static void test_verify_koji(struct artist *artist) const struct db_ops *artist_ops = test_artist_ops(); test_equal(artist->ar_name, "Koji Kondo"); test_equal(artist->ar_lower, "koji kondo"); - test_str_equal(artist_ops->dbe_key(artist), "Koji Kondo"); + test_str_equal(artist_ops->dbe_key(&artist->ar_dbe), "Koji Kondo"); } static void test_artist() @@ -27,27 +27,27 @@ static void test_artist() unsigned int i; file f; - artist = (struct artist *)artist_ops->dbe_alloc("Koji Kondo"); + artist = ARTIST(artist_ops->dbe_alloc("Koji Kondo")); test_verify_koji(artist); file_init(&f, "artist_tag", 0); file_open(&f, OPEN_WRITE); file_writef(&f, "1 \n1 "); - artist_ops->dbe_write(&f, artist); + artist_ops->dbe_write(&f, &artist->ar_dbe); file_close(&f); - artist_ops->dbe_free(artist); + artist_ops->dbe_free(&artist->ar_dbe); file_open(&f, OPEN_READ); file_readf(&f, "%u", &i); - artist = (struct artist *)artist_ops->dbe_read(&f); + artist = ARTIST(artist_ops->dbe_read(&f)); test_verify_empty(artist); - artist_ops->dbe_free(artist); + artist_ops->dbe_free(&artist->ar_dbe); file_readf(&f, "%u", &i); - artist = (struct artist *)artist_ops->dbe_read(&f); + artist = ARTIST(artist_ops->dbe_read(&f)); file_close(&f); test_verify_koji(artist); - artist_ops->dbe_free(artist); + artist_ops->dbe_free(&artist->ar_dbe); } static void test_artist_compare() @@ -55,15 +55,15 @@ static void test_artist_compare() const struct db_ops *artist_ops = test_artist_ops(); struct artist *koji, *hajime; - koji = (struct artist *)artist_ops->dbe_alloc("Koji Kondo"); - hajime = (struct artist *)artist_ops->dbe_alloc("hajime wakai"); + koji = ARTIST(artist_ops->dbe_alloc("Koji Kondo")); + hajime = ARTIST(artist_ops->dbe_alloc("hajime wakai")); test_equal(artist_compare(koji, koji), 0); test_equal(artist_compare(koji, hajime), 1); test_equal(artist_compare(hajime, koji), -1); - artist_ops->dbe_free(koji); - artist_ops->dbe_free(hajime); + artist_ops->dbe_free(&koji->ar_dbe); + artist_ops->dbe_free(&hajime->ar_dbe); } static void test_artist_db()