/** * Copyright 2014 (c) Anna Schumaker. */ extern "C" { #include } #include 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); genre->ge_name = name; genre->ge_lower = lower; g_free(lower); return genre; } static void genre_free(struct db_entry *dbe) { delete (struct 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()); } static struct db_entry *genre_read(struct file *file) { gchar *name = file_readl(file); struct genre *genre = (struct genre *)genre_alloc(name); g_free(name); return genre; } 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()); } static const struct db_ops genre_ops = { genre_alloc, genre_free, genre_key, genre_read, NULL, genre_write, }; void genre_db_init() { db_init(&genre_db, "genre.db", true, &genre_ops); db_load(&genre_db); } void genre_db_deinit() { db_deinit(&genre_db); } struct genre *genre_find(const std::string &name) { return GENRE(db_find(&genre_db, name.c_str())); } struct genre *genre_get(const unsigned int index) { return GENRE(db_at(&genre_db, index)); } int genre_compare(struct genre *lhs, struct genre *rhs) { return string_compare(lhs->ge_lower.c_str(), rhs->ge_lower.c_str()); } #ifdef CONFIG_TESTING const struct db_ops *test_genre_ops() { return &genre_ops; } #endif /* CONFIG_TESTING */