Mercurial > molko
changeset 595:793661cf1381
rpg: save -> mlk_save
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 26 Mar 2023 10:34:27 +0200 |
parents | e070fdcc592b |
children | 3228241e9863 |
files | libmlk-rpg/mlk/rpg/property.c libmlk-rpg/mlk/rpg/property.h libmlk-rpg/mlk/rpg/quest.c libmlk-rpg/mlk/rpg/quest.h libmlk-rpg/mlk/rpg/save.c libmlk-rpg/mlk/rpg/save.h tests/test-save-quest.c tests/test-save.c |
diffstat | 8 files changed, 113 insertions(+), 123 deletions(-) [+] |
line wrap: on
line diff
--- a/libmlk-rpg/mlk/rpg/property.c Fri Mar 24 15:15:31 2023 +0100 +++ b/libmlk-rpg/mlk/rpg/property.c Sun Mar 26 10:34:27 2023 +0200 @@ -26,38 +26,38 @@ #include "save.h" int -property_save(const struct property *p, struct save *s) +property_save(const struct property *p, struct mlk_save *s) { assert(p); - assert(save_ok(s)); + assert(mlk_save_ok(s)); - return save_exec(s, (const char *)assets_sql_property_save, "ss", p->key, p->value); + return mlk_save_exec(s, (const char *)assets_sql_property_save, "ss", p->key, p->value); } int -property_load(struct property *p, struct save *s) +property_load(struct property *p, struct mlk_save *s) { assert(p); - assert(save_ok(s)); + assert(mlk_save_ok(s)); - struct save_stmt stmt; - enum save_stmt_errno ret; + struct mlk_save_stmt stmt; + int ret; - if (save_stmt_init(&stmt, s, (const char *)assets_sql_property_load, "s", p->key) < 0) + if (mlk_save_stmt_init(&stmt, s, (const char *)assets_sql_property_load, "s", p->key) < 0) return -1; - ret = save_stmt_next(&stmt, "s", p->value, sizeof (p->value)) == SAVE_STMT_ROW; - save_stmt_finish(&stmt); + ret = mlk_save_stmt_next(&stmt, "s", p->value, sizeof (p->value)) == 1; + mlk_save_stmt_finish(&stmt); return ret ? 0 : -1; } int -property_remove(struct property *p, struct save *s) +property_remove(struct property *p, struct mlk_save *s) { assert(p); - assert(save_ok(s)); + assert(mlk_save_ok(s)); - return save_exec(s, (const char *)assets_sql_property_remove, "s", p->key); + return mlk_save_exec(s, (const char *)assets_sql_property_remove, "s", p->key); }
--- a/libmlk-rpg/mlk/rpg/property.h Fri Mar 24 15:15:31 2023 +0100 +++ b/libmlk-rpg/mlk/rpg/property.h Sun Mar 26 10:34:27 2023 +0200 @@ -22,7 +22,7 @@ #define PROPERTY_KEY_MAX (64) #define PROPERTY_VALUE_MAX (1024) -struct save; +struct mlk_save; struct property { char key[PROPERTY_KEY_MAX + 1]; @@ -34,13 +34,13 @@ #endif int -property_save(const struct property *, struct save *); +property_save(const struct property *, struct mlk_save *); int -property_load(struct property *, struct save *); +property_load(struct property *, struct mlk_save *); int -property_remove(struct property *, struct save *); +property_remove(struct property *, struct mlk_save *); #if defined(__cplusplus) }
--- a/libmlk-rpg/mlk/rpg/quest.c Fri Mar 24 15:15:31 2023 +0100 +++ b/libmlk-rpg/mlk/rpg/quest.c Sun Mar 26 10:34:27 2023 +0200 @@ -27,56 +27,52 @@ #include "save.h" int -quest_save(struct quest *q, struct save *s) +quest_save(struct quest *q, struct mlk_save *s) { assert(q); assert(s); const struct quest_step *step; - if (save_tx_begin(s) < 0) + if (mlk_save_tx_begin(s) < 0) return -1; - - if (save_exec(s, (const char *)assets_sql_quest_save, "s", q->name) < 0) { - save_tx_rollback(s); + if (mlk_save_exec(s, (const char *)assets_sql_quest_save, "s", q->name) < 0) { + mlk_save_tx_rollback(s); return -1; } for (size_t i = 0; i < q->stepsz; ++i) { step = &q->steps[i]; - if (save_exec(s, (const char *)assets_sql_quest_step_save, "ssi", q->name, step->name, step->percent) < 0) { - save_tx_rollback(s); + if (mlk_save_exec(s, (const char *)assets_sql_quest_step_save, "ssi", q->name, step->name, step->percent) < 0) { + mlk_save_tx_rollback(s); return -1; } } - save_tx_commit(s); - - return 0; + return mlk_save_tx_commit(s); } int -quest_load(struct quest *q, struct save *s) +quest_load(struct quest *q, struct mlk_save *s) { assert(q); assert(s); - struct save_stmt stmt; + struct mlk_save_stmt stmt; struct quest_step *step; for (size_t i = 0; i < q->stepsz; ++i) { step = &q->steps[i]; - if (save_stmt_init(&stmt, s, (const char *)assets_sql_quest_step_load, "s", step->name)) + if (mlk_save_stmt_init(&stmt, s, (const char *)assets_sql_quest_step_load, "s", step->name)) return -1; - - if (save_stmt_next(&stmt, "i", &step->percent) < 0) { - save_stmt_finish(&stmt); + if (mlk_save_stmt_next(&stmt, "i", &step->percent) < 0) { + mlk_save_stmt_finish(&stmt); return -1; } - save_stmt_finish(&stmt); + mlk_save_stmt_finish(&stmt); } return 0;
--- a/libmlk-rpg/mlk/rpg/quest.h Fri Mar 24 15:15:31 2023 +0100 +++ b/libmlk-rpg/mlk/rpg/quest.h Sun Mar 26 10:34:27 2023 +0200 @@ -21,7 +21,7 @@ #include <stddef.h> -struct save; +struct mlk_save; struct quest_step { const char *name; @@ -41,10 +41,10 @@ #endif int -quest_save(struct quest *, struct save *); +quest_save(struct quest *, struct mlk_save *); int -quest_load(struct quest *, struct save *); +quest_load(struct quest *, struct mlk_save *); #if defined(__cplusplus) }
--- a/libmlk-rpg/mlk/rpg/save.c Fri Mar 24 15:15:31 2023 +0100 +++ b/libmlk-rpg/mlk/rpg/save.c Sun Mar 26 10:34:27 2023 +0200 @@ -39,13 +39,19 @@ #define SQL_ROLLBACK "ROLLBACK" static inline int -set_error(struct save *db) +set_error(struct mlk_save *db) { return mlk_errf("%s", sqlite3_errmsg(db->handle)); } +static inline const char * +path(unsigned int idx) +{ + return mlk_util_pathf("%s%u.db", mlk_sys_dir(MLK_SYS_DIR_SAVE), idx); +} + static inline int -exec(struct save *db, const char *sql) +exec(struct mlk_save *db, const char *sql) { if (sqlite3_exec(db->handle, sql, NULL, NULL, NULL) != SQLITE_OK) return set_error(db); @@ -53,20 +59,14 @@ return 0; } -static const char * -path(unsigned int idx) -{ - return mlk_util_pathf("%s%u.db", mlk_sys_dir(MLK_SYS_DIR_SAVE), idx); -} - -static int -execu(struct save *db, const unsigned char *sql) +static inline int +execu(struct mlk_save *db, const unsigned char *sql) { return exec(db, (const char *)sql); } static int -verify(struct save *db) +verify(struct mlk_save *db) { struct { time_t *date; @@ -90,7 +90,7 @@ } static int -prepare(struct save *s, struct save_stmt *stmt, const char *sql, const char *args, va_list ap) +prepare(struct mlk_save *s, struct mlk_save_stmt *stmt, const char *sql, const char *args, va_list ap) { stmt->parent = s; stmt->handle = NULL; @@ -127,7 +127,7 @@ } static int -extract(struct save_stmt *stmt, const char *args, va_list ap) +extract(struct mlk_save_stmt *stmt, const char *args, va_list ap) { const int ncols = sqlite3_column_count(stmt->handle); @@ -162,15 +162,15 @@ } int -save_open(struct save *db, unsigned int idx, enum save_mode mode) +mlk_save_open(struct mlk_save *db, unsigned int idx, enum mlk_save_mode mode) { assert(db); - return save_open_path(db, path(idx), mode); + return mlk_save_open_path(db, path(idx), mode); } int -save_open_path(struct save *db, const char *path, enum save_mode mode) +mlk_save_open_path(struct mlk_save *db, const char *path, enum mlk_save_mode mode) { assert(db); assert(path); @@ -178,7 +178,7 @@ int flags = 0; switch (mode) { - case SAVE_MODE_WRITE: + case MLK_SAVE_MODE_WRITE: flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE; break; default: @@ -189,7 +189,7 @@ if (sqlite3_open_v2(path, (sqlite3**)&db->handle, flags, NULL) != SQLITE_OK) goto sqlite3_err; - if (mode == SAVE_MODE_WRITE && execu(db, assets_sql_init) < 0) + if (mode == MLK_SAVE_MODE_WRITE && execu(db, assets_sql_init) < 0) goto sqlite3_err; return verify(db); @@ -204,7 +204,7 @@ } int -save_ok(const struct save *db) +mlk_save_ok(const struct mlk_save *db) { assert(db); @@ -212,13 +212,13 @@ } int -save_exec(struct save *db, const char *sql, const char *args, ...) +mlk_save_exec(struct mlk_save *db, const char *sql, const char *args, ...) { - assert(save_ok(db)); + assert(mlk_save_ok(db)); assert(sql); - struct save_stmt stmt; - enum save_stmt_errno ret; + struct mlk_save_stmt stmt; + int ret; va_list ap; va_start(ap, args); @@ -228,14 +228,14 @@ if (ret < 0) return -1; - ret = save_stmt_next(&stmt, NULL); - save_stmt_finish(&stmt); + ret = mlk_save_stmt_next(&stmt, NULL); + mlk_save_stmt_finish(&stmt); - return ret == SAVE_STMT_ERROR ? -1 : 0; + return ret; } void -save_finish(struct save *db) +mlk_save_finish(struct mlk_save *db) { assert(db); @@ -246,10 +246,10 @@ } int -save_stmt_init(struct save_stmt *stmt, struct save *db, const char *sql, const char *args, ...) +mlk_save_stmt_init(struct mlk_save_stmt *stmt, struct mlk_save *db, const char *sql, const char *args, ...) { assert(stmt); - assert(save_ok(db)); + assert(mlk_save_ok(db)); assert(args); va_list ap; @@ -262,25 +262,25 @@ return ret; } -enum save_stmt_errno -save_stmt_next(struct save_stmt *stmt, const char *args, ...) +int +mlk_save_stmt_next(struct mlk_save_stmt *stmt, const char *args, ...) { assert(stmt); va_list ap; - enum save_stmt_errno ret = SAVE_STMT_ERROR; + int ret = -1; switch (sqlite3_step(stmt->handle)) { case SQLITE_ROW: va_start(ap, args); if (extract(stmt, args, ap) == 0) - ret = SAVE_STMT_ROW; + ret = 1; va_end(ap); break; case SQLITE_DONE: - ret = SAVE_STMT_DONE; + ret = 0; break; default: break; @@ -290,7 +290,7 @@ } void -save_stmt_finish(struct save_stmt *stmt) +mlk_save_stmt_finish(struct mlk_save_stmt *stmt) { assert(stmt); @@ -299,25 +299,25 @@ } int -save_tx_begin(struct save *s) +mlk_save_tx_begin(struct mlk_save *s) { - assert(save_ok(s)); + assert(mlk_save_ok(s)); - return save_exec(s, "BEGIN EXCLUSIVE TRANSACTION", NULL); + return mlk_save_exec(s, SQL_BEGIN, NULL); } -void -save_tx_rollback(struct save *s) +int +mlk_save_tx_rollback(struct mlk_save *s) { - assert(save_ok(s)); + assert(mlk_save_ok(s)); - (void)save_exec(s, "ROLLBACK", NULL); + return mlk_save_exec(s, SQL_ROLLBACK, NULL); } -void -save_tx_commit(struct save *s) +int +mlk_save_tx_commit(struct mlk_save *s) { - assert(save_ok(s)); + assert(mlk_save_ok(s)); - (void)save_exec(s, "COMMIT", NULL); + return mlk_save_exec(s, SQL_COMMIT, NULL); }
--- a/libmlk-rpg/mlk/rpg/save.h Fri Mar 24 15:15:31 2023 +0100 +++ b/libmlk-rpg/mlk/rpg/save.h Sun Mar 26 10:34:27 2023 +0200 @@ -23,66 +23,60 @@ #include <mlk/core/core.h> -struct save { +struct mlk_save { time_t created; time_t updated; void *handle; }; -enum save_mode { - SAVE_MODE_READ, - SAVE_MODE_WRITE +enum mlk_save_mode { + MLK_SAVE_MODE_READ, + MLK_SAVE_MODE_WRITE }; -struct save_stmt { +struct mlk_save_stmt { struct save *parent; void *handle; }; -enum save_stmt_errno { - SAVE_STMT_DONE, - SAVE_STMT_ROW, - SAVE_STMT_ERROR -}; - #if defined(__cplusplus) extern "C" { #endif int -save_open(struct save *, unsigned int, enum save_mode); +mlk_save_open(struct mlk_save *, unsigned int, enum mlk_save_mode); int -save_open_path(struct save *, const char *, enum save_mode); +mlk_save_open_path(struct mlk_save *, const char *, enum mlk_save_mode); int -save_ok(const struct save *); +mlk_save_ok(const struct mlk_save *); int -save_exec(struct save *, const char *, const char *, ...); +mlk_save_exec(struct mlk_save *, const char *, const char *, ...); void -save_finish(struct save *); +mlk_save_finish(struct mlk_save *); /* Prepared statements. */ int -save_stmt_init(struct save_stmt *, struct save *, const char *, const char *, ...); +mlk_save_stmt_init(struct mlk_save_stmt *, struct mlk_save *, const char *, const char *, ...); -enum save_stmt_errno -save_stmt_next(struct save_stmt *, const char *, ...); +int +mlk_save_stmt_next(struct mlk_save_stmt *, const char *, ...); void -save_stmt_finish(struct save_stmt *); +mlk_save_stmt_finish(struct mlk_save_stmt *); /* Explicit transactions. */ int -save_tx_begin(struct save *); +mlk_save_tx_begin(struct mlk_save *); -void -save_tx_rollback(struct save *); +int +mlk_save_tx_rollback(struct mlk_save *); -void -save_tx_commit(struct save *); +int +mlk_save_tx_commit(struct mlk_save *); #if defined(__cplusplus) }
--- a/tests/test-save-quest.c Fri Mar 24 15:15:31 2023 +0100 +++ b/tests/test-save-quest.c Sun Mar 26 10:34:27 2023 +0200 @@ -59,14 +59,14 @@ int main(void) { - struct save save; + struct mlk_save save; - if (save_open_path(&save, "quest.db", SAVE_MODE_WRITE) < 0) + if (mlk_save_open_path(&save, "quest.db", MLK_SAVE_MODE_WRITE) < 0) return 1; DT_RUN(test_basics_load, &save); DT_SUMMARY(); - save_finish(&save); + mlk_save_finish(&save); remove("quest.db"); }
--- a/tests/test-save.c Fri Mar 24 15:15:31 2023 +0100 +++ b/tests/test-save.c Sun Mar 26 10:34:27 2023 +0200 @@ -33,22 +33,22 @@ static void test_basics_read(void) { - struct save db; + struct mlk_save db; /* Non-existent should return error. */ - DT_EQ_INT(save_open_path(&db, "1.db", SAVE_MODE_READ), -1); - save_finish(&db); + DT_EQ_INT(mlk_save_open_path(&db, "1.db", MLK_SAVE_MODE_READ), -1); + mlk_save_finish(&db); cleanup(); } static void test_basics_write(void) { - struct save db[2] = {0}; + struct mlk_save db[2] = {0}; /* Write should work on both non-existent and existent database. */ - DT_EQ_INT(save_open_path(&db[0], "1.db", SAVE_MODE_WRITE), 0); - DT_EQ_INT(save_open_path(&db[1], "2.db", SAVE_MODE_WRITE), 0); + DT_EQ_INT(mlk_save_open_path(&db[0], "1.db", MLK_SAVE_MODE_WRITE), 0); + DT_EQ_INT(mlk_save_open_path(&db[1], "2.db", MLK_SAVE_MODE_WRITE), 0); /* Update and create date must not be 0. */ DT_ASSERT(db[0].created > 0); @@ -56,19 +56,19 @@ DT_ASSERT(db[1].created > 0); DT_ASSERT(db[1].updated > 0); - save_finish(&db[0]); - save_finish(&db[1]); + mlk_save_finish(&db[0]); + mlk_save_finish(&db[1]); /* Should work again. */ - DT_ASSERT(save_open_path(&db[0], "1.db", SAVE_MODE_WRITE) == 0); - DT_ASSERT(save_open_path(&db[1], "2.db", SAVE_MODE_WRITE) == 0); + DT_ASSERT(mlk_save_open_path(&db[0], "1.db", MLK_SAVE_MODE_WRITE) == 0); + DT_ASSERT(mlk_save_open_path(&db[1], "2.db", MLK_SAVE_MODE_WRITE) == 0); DT_ASSERT(db[0].created > 0); DT_ASSERT(db[0].updated > 0); DT_ASSERT(db[1].created > 0); DT_ASSERT(db[1].updated > 0); - save_finish(&db[0]); - save_finish(&db[1]); + mlk_save_finish(&db[0]); + mlk_save_finish(&db[1]); } #if 0