From 8486fc6111687f225e97c8a9b707ceaaebae7d99 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Thu, 17 Sep 2015 08:12:25 -0400 Subject: [PATCH] core/database: Move db_load() out of the database struct Signed-off-by: Anna Schumaker --- core/playlist.cpp | 2 +- core/tags/album.cpp | 2 +- core/tags/artist.cpp | 2 +- core/tags/genre.cpp | 2 +- core/tags/library.cpp | 2 +- core/tags/track.cpp | 2 +- include/core/database.h | 14 +++++--------- include/core/database.hpp | 28 +++++++++++++--------------- tests/core/database.cpp | 8 ++++---- tests/core/index.cpp | 4 ++-- tests/core/tags/album.cpp | 2 +- tests/core/tags/artist.cpp | 2 +- tests/core/tags/genre.cpp | 2 +- tests/core/tags/library.cpp | 2 +- tests/core/tags/track.cpp | 2 +- 15 files changed, 35 insertions(+), 41 deletions(-) diff --git a/core/playlist.cpp b/core/playlist.cpp index df480a9c..7d0a67ed 100644 --- a/core/playlist.cpp +++ b/core/playlist.cpp @@ -87,7 +87,7 @@ void playlist :: init() { std::set::iterator it; - playlist_db.load(); + db_load(&playlist_db); IndexEntry *ent = get_tracks("Banned"); if (!ent) diff --git a/core/tags/album.cpp b/core/tags/album.cpp index 87716008..7b820e03 100644 --- a/core/tags/album.cpp +++ b/core/tags/album.cpp @@ -50,7 +50,7 @@ unsigned int Album :: year() void tags :: init_album_db() { - album_db.load(); + db_load(&album_db); } Album *tags :: get_album(const std::string &name, unsigned int year) diff --git a/core/tags/artist.cpp b/core/tags/artist.cpp index a458468c..e17023fa 100644 --- a/core/tags/artist.cpp +++ b/core/tags/artist.cpp @@ -17,7 +17,7 @@ Artist :: Artist(const std::string &name) void tags :: init_artist_db() { - artist_db.load(); + db_load(&artist_db); } Artist *tags :: get_artist(const std::string &name) diff --git a/core/tags/genre.cpp b/core/tags/genre.cpp index e25877a2..658dc2f7 100644 --- a/core/tags/genre.cpp +++ b/core/tags/genre.cpp @@ -17,7 +17,7 @@ Genre :: Genre(const std::string &name) void tags :: init_genre_db() { - genre_db.load(); + db_load(&genre_db); } Genre *tags :: get_genre(const std::string &name) diff --git a/core/tags/library.cpp b/core/tags/library.cpp index 2c59f1a4..3f3dcb42 100644 --- a/core/tags/library.cpp +++ b/core/tags/library.cpp @@ -69,7 +69,7 @@ void Library :: dec_size() void tags :: init_library_db() { - library_db.load(); + db_load(&library_db); } Library *tags :: get_library(const std::string &path) diff --git a/core/tags/track.cpp b/core/tags/track.cpp index 40d914e0..f23f8440 100644 --- a/core/tags/track.cpp +++ b/core/tags/track.cpp @@ -140,7 +140,7 @@ void Track :: write(file &file) void tags :: init_track_db() { - track_db.load(); + db_load(&track_db); } Track *tags :: add_track(Album *album, Artist *artist, Genre *genre, diff --git a/include/core/database.h b/include/core/database.h index bb445d2e..4203e6fd 100644 --- a/include/core/database.h +++ b/include/core/database.h @@ -12,18 +12,14 @@ extern "C" { #include #include -template struct database; - /** * The DatabaseEntry class is the base class for storing * generic data inside a Database. */ class DatabaseEntry { -private: - template friend struct database; +public: unsigned int _index; /**< The location of an item in the Database. */ -public: DatabaseEntry(); /**< Initialize _index to 0. */ virtual ~DatabaseEntry() = 0; /**< Virtual destructor */ @@ -122,10 +118,6 @@ struct database { */ void autosave(); - /** - * Called to read the Database from disk. - */ - void load(); /** @@ -193,6 +185,10 @@ struct database { }; +/* Called to read the database from disk. */ +template +void db_load(struct database *); + /* Returns the size of the backing std::vector. */ template unsigned int db_actual_size(const struct database *); diff --git a/include/core/database.hpp b/include/core/database.hpp index f31fc2db..60dd989e 100644 --- a/include/core/database.hpp +++ b/include/core/database.hpp @@ -50,34 +50,32 @@ void database :: autosave() } template -void database :: load() +void db_load(struct database *db) { unsigned int size; std::string str; int valid; - if (file_exists(&db_file) == false) - return; - else if (file_open(&db_file, OPEN_READ) == false) + if (file_open(&db->db_file, OPEN_READ) == false) return; - file_readf(&db_file, "%u", &size); - db_entries.resize(size); + file_readf(&db->db_file, "%u", &size); + db->db_entries.resize(size); for (unsigned int i = 0; i < size; i++) { - file_readf(&db_file, "%d", &valid); + file_readf(&db->db_file, "%d", &valid); if (valid == false) { - db_entries[i] = NULL; + db->db_entries[i] = NULL; } else { - db_entries[i] = new T; - db_entries[i]->_index = i; - db_entries[i]->read(db_file); - str = db_entries[i]->primary_key(); - db_keys[str] = i; - db_size++; + db->db_entries[i] = new T; + db->db_entries[i]->_index = i; + db->db_entries[i]->read(db->db_file); + str = db->db_entries[i]->primary_key(); + db->db_keys[str] = i; + db->db_size++; } } - file_close(&db_file); + file_close(&db->db_file); } template diff --git a/tests/core/database.cpp b/tests/core/database.cpp index 20b3996b..09c62c56 100644 --- a/tests/core/database.cpp +++ b/tests/core/database.cpp @@ -153,7 +153,7 @@ static void test_save_load() for (i = 0; i < N; i++) db1.insert(int_entry(i)); - db2.load(); + db_load(&db2); test_equal(db2.db_size, N); test_equal(db_actual_size(&db2), N); for (i = 0; i < N; i++) { @@ -167,7 +167,7 @@ static void test_save_load() db1.remove(i); db2 = database("save_load.db", false); - db2.load(); + db_load(&db2); test_equal(db2.db_size, N / 2); for (i = 1; i < N; i++) { dbe = db2.at(i); @@ -186,12 +186,12 @@ static void test_save_load() db2.remove(i); db1 = database("save_load.db", false); - db1.load(); + db_load(&db1); test_equal(db1.db_size, N / 2); db2.save(); db1 = database("save_load.db", false); - db1.load(); + db_load(&db1); test_equal(db1.db_size, N); test_equal(db_actual_size(&db1), 2 * N); diff --git a/tests/core/index.cpp b/tests/core/index.cpp index 9a1d96f6..92dda20c 100644 --- a/tests/core/index.cpp +++ b/tests/core/index.cpp @@ -77,11 +77,11 @@ static void test_save_load(unsigned int n) Index idx2("index.idx", false); IndexEntry *it1, *it2; - idx2.load(); + db_load(&idx2); test_equal(idx2.db_size, (unsigned)0); INDEX->save(); - idx2.load(); + db_load(&idx2); test_equal(idx2.db_size, INDEX->db_size); test_equal(db_actual_size(&idx2), db_actual_size(INDEX)); diff --git a/tests/core/tags/album.cpp b/tests/core/tags/album.cpp index 7eb4ac4a..01181f84 100644 --- a/tests/core/tags/album.cpp +++ b/tests/core/tags/album.cpp @@ -49,7 +49,7 @@ static void test_album_tag_lookup() test_equal(tags :: get_album(0), album); test_equal(tags :: get_album(1), (Album *)NULL); - album_db.load(); + db_load(&album_db); test_equal(album_db.db_size, (unsigned)1); } diff --git a/tests/core/tags/artist.cpp b/tests/core/tags/artist.cpp index 393bc343..cc72f05c 100644 --- a/tests/core/tags/artist.cpp +++ b/tests/core/tags/artist.cpp @@ -30,7 +30,7 @@ static void test_artist_tag_lookup() test_equal(tags :: get_artist(0), artist); test_equal(tags :: get_artist(1), (Artist *)NULL); - artist_db.load(); + db_load(&artist_db); test_equal(artist_db.db_size, (unsigned)1); } diff --git a/tests/core/tags/genre.cpp b/tests/core/tags/genre.cpp index c9d8e4b1..8321f5db 100644 --- a/tests/core/tags/genre.cpp +++ b/tests/core/tags/genre.cpp @@ -30,7 +30,7 @@ static void test_genere_tag_lookup() test_equal(tags :: get_genre(0), genre); test_equal(tags :: get_genre(1), (Genre *)NULL); - genre_db.load(); + db_load(&genre_db); test_equal(genre_db.db_size, (unsigned)1); } diff --git a/tests/core/tags/library.cpp b/tests/core/tags/library.cpp index 48361e6c..745165de 100644 --- a/tests/core/tags/library.cpp +++ b/tests/core/tags/library.cpp @@ -58,7 +58,7 @@ static void test_library_tag_lookup() test_equal(tags :: get_library(0), library); test_equal(tags :: get_library(1), (Library *)NULL); - library_db.load(); + db_load(&library_db); test_equal(db_actual_size(&library_db), (unsigned)tags :: library_size()); tags :: remove_library(library); diff --git a/tests/core/tags/track.cpp b/tests/core/tags/track.cpp index 47ba7237..f6e5c8a2 100644 --- a/tests/core/tags/track.cpp +++ b/tests/core/tags/track.cpp @@ -108,7 +108,7 @@ static void test_track_tag_destructor() static void test_track_tag_load_db(unsigned int size) { database track_db("track.db", false); - track_db.load(); + db_load(&track_db); test_equal(track_db.db_size, size); }