core/tags/genre: Convert lowercased string into tokens
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
a70b27779f
commit
1ca9bb36c1
|
@ -12,8 +12,8 @@ static struct genre *__genre_alloc(gchar *name)
|
||||||
struct genre *genre = g_malloc(sizeof(struct genre));
|
struct genre *genre = g_malloc(sizeof(struct genre));
|
||||||
|
|
||||||
dbe_init(&genre->ge_dbe, genre);
|
dbe_init(&genre->ge_dbe, genre);
|
||||||
genre->ge_name = name;
|
genre->ge_name = name;
|
||||||
genre->ge_lower = string_lowercase(name);
|
genre->ge_tokens = g_str_tokenize_and_fold(name, NULL, &genre->ge_alts);
|
||||||
|
|
||||||
return genre;
|
return genre;
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,8 @@ static struct db_entry *genre_alloc(const gchar *name)
|
||||||
|
|
||||||
static void genre_free(struct db_entry *dbe)
|
static void genre_free(struct db_entry *dbe)
|
||||||
{
|
{
|
||||||
g_free(GENRE(dbe)->ge_lower);
|
g_strfreev(GENRE(dbe)->ge_tokens);
|
||||||
|
g_strfreev(GENRE(dbe)->ge_alts);
|
||||||
g_free(GENRE(dbe));
|
g_free(GENRE(dbe));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +79,7 @@ struct genre *genre_get(const unsigned int index)
|
||||||
|
|
||||||
int genre_compare(struct genre *lhs, struct genre *rhs)
|
int genre_compare(struct genre *lhs, struct genre *rhs)
|
||||||
{
|
{
|
||||||
return string_compare(lhs->ge_lower, rhs->ge_lower);
|
return string_compare_tokens(lhs->ge_tokens, rhs->ge_tokens);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TESTING
|
#ifdef CONFIG_TESTING
|
||||||
|
|
|
@ -16,8 +16,9 @@
|
||||||
#include <core/database.h>
|
#include <core/database.h>
|
||||||
|
|
||||||
struct genre {
|
struct genre {
|
||||||
gchar *ge_name; /* This genre's name. */
|
gchar *ge_name; /* This genre's name. */
|
||||||
gchar *ge_lower; /* This genre's name (lowercased). */
|
gchar **ge_tokens; /* This genre's tokenized strings. */
|
||||||
|
gchar **ge_alts; /* This genre's alternate ascii tokens. */
|
||||||
struct db_entry ge_dbe;
|
struct db_entry ge_dbe;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,8 @@ static void test_verify_empty(struct genre *genre)
|
||||||
{
|
{
|
||||||
const struct db_ops *genre_ops = test_genre_ops();
|
const struct db_ops *genre_ops = test_genre_ops();
|
||||||
test_equal(genre->ge_name, "");
|
test_equal(genre->ge_name, "");
|
||||||
test_equal(genre->ge_lower, "");
|
test_equal((void *)genre->ge_tokens[0], NULL);
|
||||||
|
test_equal((void *)genre->ge_alts[0], NULL);
|
||||||
test_equal(genre_ops->dbe_key(&genre->ge_dbe), "");
|
test_equal(genre_ops->dbe_key(&genre->ge_dbe), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +17,11 @@ static void test_verify_vg(struct genre *genre)
|
||||||
{
|
{
|
||||||
const struct db_ops *genre_ops = test_genre_ops();
|
const struct db_ops *genre_ops = test_genre_ops();
|
||||||
test_equal(genre->ge_name, "Video Game Music");
|
test_equal(genre->ge_name, "Video Game Music");
|
||||||
test_equal(genre->ge_lower, "video game music");
|
test_equal(genre->ge_tokens[0], "video");
|
||||||
|
test_equal(genre->ge_tokens[1], "game");
|
||||||
|
test_equal(genre->ge_tokens[2], "music");
|
||||||
|
test_equal((void *)genre->ge_tokens[3], NULL);
|
||||||
|
test_equal((void *)genre->ge_alts[0], NULL);
|
||||||
test_equal(genre_ops->dbe_key(&genre->ge_dbe), "Video Game Music");
|
test_equal(genre_ops->dbe_key(&genre->ge_dbe), "Video Game Music");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue