core/database: Add C-style initializer macro
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
877d9ac1d7
commit
b28b0c8464
|
@ -77,6 +77,16 @@ struct database {
|
||||||
const struct db_ops *db_ops; /* The database's operations vector. */
|
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
|
* Initialize a database using filepath as a location on disk to store data
|
||||||
|
|
|
@ -106,9 +106,7 @@ static void test_db_entry()
|
||||||
|
|
||||||
static void test_init()
|
static void test_init()
|
||||||
{
|
{
|
||||||
struct database db;
|
struct database db = DB_INIT("init.db", false, &int_ops);
|
||||||
|
|
||||||
db_init(&db, "init.db", false, &int_ops);
|
|
||||||
|
|
||||||
/* Check initial sizes. */
|
/* Check initial sizes. */
|
||||||
test_equal(db.db_entries->len, 0);
|
test_equal(db.db_entries->len, 0);
|
||||||
|
@ -126,9 +124,9 @@ static void test_init()
|
||||||
|
|
||||||
static void test_stress(unsigned int N)
|
static void test_stress(unsigned int N)
|
||||||
{
|
{
|
||||||
|
struct database db = DB_INIT("stress.db", false, &int_ops);;
|
||||||
struct db_entry *dbe, *next;
|
struct db_entry *dbe, *next;
|
||||||
struct int_entry rmv;
|
struct int_entry rmv;
|
||||||
struct database db;
|
|
||||||
GPtrArray *ptrs;
|
GPtrArray *ptrs;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
gchar *key;
|
gchar *key;
|
||||||
|
@ -137,7 +135,6 @@ static void test_stress(unsigned int N)
|
||||||
rmv.ie_dbe.dbe_index = 0;
|
rmv.ie_dbe.dbe_index = 0;
|
||||||
test_free_count = 0;
|
test_free_count = 0;
|
||||||
test_setup_count = 0;
|
test_setup_count = 0;
|
||||||
db_init(&db, "stress.db", false, &int_ops);
|
|
||||||
ptrs = g_ptr_array_new();
|
ptrs = g_ptr_array_new();
|
||||||
|
|
||||||
/* db_insert() */
|
/* db_insert() */
|
||||||
|
@ -240,14 +237,12 @@ static void test_stress_100K() { test_stress(100000); }
|
||||||
|
|
||||||
static void test_save_load()
|
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;
|
struct db_entry *dbe, *next;
|
||||||
const unsigned int N = 10;
|
const unsigned int N = 10;
|
||||||
struct database db1, db2;
|
|
||||||
unsigned int i;
|
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 */
|
/* 10 items should "autosave" when inserted */
|
||||||
for (i = 0; i < N; i++)
|
for (i = 0; i < N; i++)
|
||||||
db_insert(&db1, &__int_alloc(i)->ie_dbe);
|
db_insert(&db1, &__int_alloc(i)->ie_dbe);
|
||||||
|
|
Loading…
Reference in New Issue