From 1ca9bb36c1a25233fc700d3c9d601bc82518277a Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Thu, 19 May 2016 11:20:35 -0400 Subject: [PATCH] core/tags/genre: Convert lowercased string into tokens Signed-off-by: Anna Schumaker --- core/tags/genre.c | 9 +++++---- include/core/tags/genre.h | 5 +++-- tests/core/tags/genre.c | 9 +++++++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/core/tags/genre.c b/core/tags/genre.c index 5f819e8e..8ecde940 100644 --- a/core/tags/genre.c +++ b/core/tags/genre.c @@ -12,8 +12,8 @@ static struct genre *__genre_alloc(gchar *name) struct genre *genre = g_malloc(sizeof(struct genre)); dbe_init(&genre->ge_dbe, genre); - genre->ge_name = name; - genre->ge_lower = string_lowercase(name); + genre->ge_name = name; + genre->ge_tokens = g_str_tokenize_and_fold(name, NULL, &genre->ge_alts); return genre; } @@ -25,7 +25,8 @@ static struct db_entry *genre_alloc(const gchar *name) 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)); } @@ -78,7 +79,7 @@ struct genre *genre_get(const unsigned int index) 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 diff --git a/include/core/tags/genre.h b/include/core/tags/genre.h index 0301cb53..e0b1cf43 100644 --- a/include/core/tags/genre.h +++ b/include/core/tags/genre.h @@ -16,8 +16,9 @@ #include struct genre { - gchar *ge_name; /* This genre's name. */ - gchar *ge_lower; /* This genre's name (lowercased). */ + gchar *ge_name; /* This genre's name. */ + gchar **ge_tokens; /* This genre's tokenized strings. */ + gchar **ge_alts; /* This genre's alternate ascii tokens. */ struct db_entry ge_dbe; }; diff --git a/tests/core/tags/genre.c b/tests/core/tags/genre.c index 22b86d17..d034893f 100644 --- a/tests/core/tags/genre.c +++ b/tests/core/tags/genre.c @@ -8,7 +8,8 @@ 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_equal((void *)genre->ge_tokens[0], NULL); + test_equal((void *)genre->ge_alts[0], NULL); 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(); 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"); }