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