core/tags/genre: Replace constructor with a backwards pointer
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
6d9c89392e
commit
e98e74213e
|
@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue