core/tags/genre: Replace std::string with gchar *

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-11-11 12:05:02 -05:00
parent e98e74213e
commit 6c3d708576
4 changed files with 27 additions and 20 deletions

View File

@ -9,40 +9,41 @@ extern "C" {
static struct database genre_db;
static struct db_entry *genre_alloc(const gchar *name)
static struct genre *__genre_alloc(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;
genre->ge_lower = string_lowercase(name);
g_free(lower);
return &genre->ge_dbe;
return genre;
}
static struct db_entry *genre_alloc(const gchar *name)
{
return &__genre_alloc(g_strdup(name))->ge_dbe;
}
static void genre_free(struct db_entry *dbe)
{
g_free(GENRE(dbe)->ge_lower);
delete GENRE(dbe);
}
static gchar *genre_key(struct db_entry *dbe)
{
return g_strdup_printf(GENRE(dbe)->ge_name.c_str());
return GENRE(dbe)->ge_name;
}
static struct db_entry *genre_read(struct file *file)
{
gchar *name = file_readl(file);
struct db_entry *dbe = genre_alloc(name);
g_free(name);
return dbe;
return &__genre_alloc(file_readl(file))->ge_dbe;
}
static void genre_write(struct file *file, struct db_entry *dbe)
{
file_writef(file, "%s", GENRE(dbe)->ge_name.c_str());
file_writef(file, "%s", GENRE(dbe)->ge_name);
}
@ -67,9 +68,9 @@ void genre_db_deinit()
db_deinit(&genre_db);
}
struct genre *genre_find(const std::string &name)
struct genre *genre_find(const gchar *name)
{
return GENRE(db_find(&genre_db, name.c_str()));
return GENRE(db_find(&genre_db, name));
}
struct genre *genre_get(const unsigned int index)
@ -79,7 +80,7 @@ struct genre *genre_get(const unsigned int index)
int genre_compare(struct genre *lhs, struct genre *rhs)
{
return string_compare(lhs->ge_lower.c_str(), rhs->ge_lower.c_str());
return string_compare(lhs->ge_lower, rhs->ge_lower);
}
#ifdef CONFIG_TESTING

View File

@ -126,7 +126,8 @@ void QueueModel::get_value_vfunc(const Gtk::TreeIter &iter, int column,
case 5:
return set_val(track->tr_album->al_year, value);
case 6:
return set_val(track->tr_genre->ge_name, value);
field = track->tr_genre->ge_name;
return set_val(field, value);
case 7:
return set_val(track->tr_count, value);
case 8:

View File

@ -14,8 +14,8 @@ extern "C" {
* to the tag database.
*/
struct genre {
std::string ge_name; /* This genre's name. */
std::string ge_lower; /* This genre's name (lowercased). */
gchar *ge_name; /* This genre's name. */
gchar *ge_lower; /* This genre's name (lowercased). */
struct db_entry ge_dbe;
};
@ -29,7 +29,7 @@ void genre_db_init();
void genre_db_deinit();
/* Called to find a genre tag by name. */
struct genre *genre_find(const std::string &);
struct genre *genre_find(const gchar *);
/* Called to get a genre tag with a specific index. */
struct genre *genre_get(const unsigned int);

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->ge_dbe), "");
test_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->ge_dbe), "Video Game Music");
test_equal(genre_ops->dbe_key(&genre->ge_dbe), "Video Game Music");
}
static void test_genre()
@ -35,18 +35,21 @@ static void test_genre()
file_writef(&f, "1 \n1 ");
genre_ops->dbe_write(&f, &genre->ge_dbe);
file_close(&f);
g_free(genre->ge_name);
genre_ops->dbe_free(&genre->ge_dbe);
file_open(&f, OPEN_READ);
file_readf(&f, "%u", &i);
genre = GENRE(genre_ops->dbe_read(&f));
test_verify_empty(genre);
g_free(genre->ge_name);
genre_ops->dbe_free(&genre->ge_dbe);
file_readf(&f, "%u", &i);
genre = GENRE(genre_ops->dbe_read(&f));
file_close(&f);
test_verify_vg(genre);
g_free(genre->ge_name);
genre_ops->dbe_free(&genre->ge_dbe);
}
@ -62,6 +65,8 @@ static void test_genre_compare()
test_equal(genre_compare(video, game), 1);
test_equal(genre_compare(game, video), -1);
g_free(video->ge_name);
g_free(game->ge_name);
genre_ops->dbe_free(&video->ge_dbe);
genre_ops->dbe_free(&game->ge_dbe);
}