core/database: Move db_load() out of the database struct

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-09-17 08:12:25 -04:00
parent 3a74cb0aa5
commit 8486fc6111
15 changed files with 35 additions and 41 deletions

View File

@ -87,7 +87,7 @@ void playlist :: init()
{
std::set<unsigned int>::iterator it;
playlist_db.load();
db_load(&playlist_db);
IndexEntry *ent = get_tracks("Banned");
if (!ent)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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,

View File

@ -12,18 +12,14 @@ extern "C" {
#include <string>
#include <vector>
template<class T> struct database;
/**
* The DatabaseEntry class is the base class for storing
* generic data inside a Database.
*/
class DatabaseEntry {
private:
template <class T> 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 <class T>
void db_load(struct database<T> *);
/* Returns the size of the backing std::vector. */
template <class T>
unsigned int db_actual_size(const struct database<T> *);

View File

@ -50,34 +50,32 @@ void database<T> :: autosave()
}
template <class T>
void database<T> :: load()
void db_load(struct database<T> *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 <class T>

View File

@ -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<struct int_entry>("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<struct int_entry>("save_load.db", false);
db1.load();
db_load(&db1);
test_equal(db1.db_size, N / 2);
db2.save();
db1 = database<struct int_entry>("save_load.db", false);
db1.load();
db_load(&db1);
test_equal(db1.db_size, N);
test_equal(db_actual_size(&db1), 2 * N);

View File

@ -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));

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -108,7 +108,7 @@ static void test_track_tag_destructor()
static void test_track_tag_load_db(unsigned int size)
{
database<Track> track_db("track.db", false);
track_db.load();
db_load(&track_db);
test_equal(track_db.db_size, size);
}