core/database: Move db_load() out of the database struct
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
3a74cb0aa5
commit
8486fc6111
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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> *);
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue