From 68c953f1864eb4daf58f0dc4a7b980afeb1582bf Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sun, 18 Oct 2015 10:11:24 -0400 Subject: [PATCH] core/database: Move db_{save|autosave}() out of the database struct Signed-off-by: Anna Schumaker --- core/index.cpp | 4 ++-- core/tags/library.cpp | 2 +- core/tags/track.cpp | 2 +- include/core/database.h | 20 ++++++++------------ include/core/database.hpp | 30 +++++++++++++++--------------- tests/core/database.cpp | 2 +- tests/core/index.cpp | 2 +- 7 files changed, 29 insertions(+), 33 deletions(-) diff --git a/core/index.cpp b/core/index.cpp index cd88f65a..cab46c79 100644 --- a/core/index.cpp +++ b/core/index.cpp @@ -80,7 +80,7 @@ void Index :: insert(const std::string &key, unsigned int value) it = database :: insert(IndexEntry(key)); it->insert(value); - autosave(); + ::db_autosave(this); } void Index :: remove(const std::string &key, unsigned int value) @@ -91,5 +91,5 @@ void Index :: remove(const std::string &key, unsigned int value) return; it->remove(value); - autosave(); + ::db_autosave(this); } diff --git a/core/tags/library.cpp b/core/tags/library.cpp index 3f3dcb42..cd91fb31 100644 --- a/core/tags/library.cpp +++ b/core/tags/library.cpp @@ -48,7 +48,7 @@ const bool Library :: enabled() void Library :: set_enabled(bool enabled) { _enabled = enabled; - library_db.save(); + db_save(&library_db); } const unsigned int Library :: size() diff --git a/core/tags/track.cpp b/core/tags/track.cpp index f23f8440..f85539c7 100644 --- a/core/tags/track.cpp +++ b/core/tags/track.cpp @@ -181,5 +181,5 @@ unsigned int tags :: track_size() void tags :: commit_track_db() { - track_db.save(); + db_save(&track_db); } diff --git a/include/core/database.h b/include/core/database.h index 4203e6fd..58d2ad9c 100644 --- a/include/core/database.h +++ b/include/core/database.h @@ -107,18 +107,6 @@ struct database { */ ~database(); - /** - * Called to save the Database to disk. - */ - void save(); - - /** - * Called to save the Database to disk ONLY if Database::_autosave - * was set to True. - */ - void autosave(); - - /** * Called to add a new item to the Database. Upon successful insertion, @@ -185,6 +173,14 @@ struct database { }; +/* Called to write the database to disk. */ +template +void db_save(struct database *); + +/* Save the database to disk iff database->db_autosave is set to True */ +template +void db_autosave(struct database *); + /* Called to read the database from disk. */ template void db_load(struct database *); diff --git a/include/core/database.hpp b/include/core/database.hpp index 60dd989e..58662e38 100644 --- a/include/core/database.hpp +++ b/include/core/database.hpp @@ -23,30 +23,30 @@ database :: ~database() } template -void database :: save() +void db_save(struct database *db) { - if (file_open(&db_file, OPEN_WRITE) == false) + if (file_open(&db->db_file, OPEN_WRITE) == false) return; - file_writef(&db_file, "%u\n", db_actual_size(this)); - for (unsigned int i = 0; i < db_entries.size(); i++) { - if (db_entries[i] == NULL) - file_writef(&db_file, "%d\n", false); + file_writef(&db->db_file, "%u\n", db_actual_size(db)); + for (unsigned int i = 0; i < db_actual_size(db); i++) { + if (db->db_entries[i] == NULL) + file_writef(&db->db_file, "%d\n", false); else { - file_writef(&db_file, "%d ", true); - db_entries[i]->write(db_file); - file_writef(&db_file, "\n"); + file_writef(&db->db_file, "%d ", true); + db->db_entries[i]->write(db->db_file); + file_writef(&db->db_file, "\n"); } } - file_close(&db_file); + file_close(&db->db_file); } template -void database :: autosave() +void db_autosave(struct database *db) { - if (db_autosave == true) - save(); + if (db->db_autosave == true) + db_save(db); } template @@ -92,7 +92,7 @@ T *database :: insert(const T &item) db_keys[t->primary_key()] = t->index(); db_size++; - autosave(); + ::db_autosave(this); return t; } @@ -107,7 +107,7 @@ void database :: remove(unsigned int index) delete db_entries[index]; db_entries[index] = NULL; db_size--; - autosave(); + ::db_autosave(this); } template diff --git a/tests/core/database.cpp b/tests/core/database.cpp index 09c62c56..0343bdc8 100644 --- a/tests/core/database.cpp +++ b/tests/core/database.cpp @@ -189,7 +189,7 @@ static void test_save_load() db_load(&db1); test_equal(db1.db_size, N / 2); - db2.save(); + db_save(&db2); db1 = database("save_load.db", false); db_load(&db1); diff --git a/tests/core/index.cpp b/tests/core/index.cpp index 92dda20c..c03d0433 100644 --- a/tests/core/index.cpp +++ b/tests/core/index.cpp @@ -80,7 +80,7 @@ static void test_save_load(unsigned int n) db_load(&idx2); test_equal(idx2.db_size, (unsigned)0); - INDEX->save(); + db_save(INDEX); db_load(&idx2); test_equal(idx2.db_size, INDEX->db_size);