core/database: Add C-style initializer macro

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-11-06 08:13:25 -05:00
parent 877d9ac1d7
commit b28b0c8464
2 changed files with 14 additions and 9 deletions

View File

@ -77,6 +77,16 @@ struct database {
const struct db_ops *db_ops; /* The database's operations vector. */
};
#define DB_INIT(fname, autosave, ops) \
{ \
.db_size = 0, \
.db_autosave = autosave, \
.db_file = FILE_INIT(fname, 0), \
.db_entries = g_ptr_array_new(), \
.db_keys = g_hash_table_new(g_str_hash, g_str_equal), \
.db_ops = ops, \
}
/*
* Initialize a database using filepath as a location on disk to store data

View File

@ -106,9 +106,7 @@ static void test_db_entry()
static void test_init()
{
struct database db;
db_init(&db, "init.db", false, &int_ops);
struct database db = DB_INIT("init.db", false, &int_ops);
/* Check initial sizes. */
test_equal(db.db_entries->len, 0);
@ -126,9 +124,9 @@ static void test_init()
static void test_stress(unsigned int N)
{
struct database db = DB_INIT("stress.db", false, &int_ops);;
struct db_entry *dbe, *next;
struct int_entry rmv;
struct database db;
GPtrArray *ptrs;
unsigned int i;
gchar *key;
@ -137,7 +135,6 @@ static void test_stress(unsigned int N)
rmv.ie_dbe.dbe_index = 0;
test_free_count = 0;
test_setup_count = 0;
db_init(&db, "stress.db", false, &int_ops);
ptrs = g_ptr_array_new();
/* db_insert() */
@ -240,14 +237,12 @@ static void test_stress_100K() { test_stress(100000); }
static void test_save_load()
{
struct database db1 = DB_INIT("save_load.db", true, &int_ops);
struct database db2 = DB_INIT("save_load.db", false, &int_ops);
struct db_entry *dbe, *next;
const unsigned int N = 10;
struct database db1, db2;
unsigned int i;
db_init(&db1, "save_load.db", true, &int_ops);
db_init(&db2, "save_load.db", false, &int_ops);
/* 10 items should "autosave" when inserted */
for (i = 0; i < N; i++)
db_insert(&db1, &__int_alloc(i)->ie_dbe);