core/tags/genre: Replace constructor with a backwards pointer

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-11-11 11:57:54 -05:00
parent 6d9c89392e
commit e98e74213e
4 changed files with 24 additions and 29 deletions

View File

@ -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());
}

View File

@ -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,

View File

@ -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. */

View File

@ -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()