From 1c4f10d917b8bdff3c2b066f4b51843d4ad490b7 Mon Sep 17 00:00:00 2001 From: dam Date: Sat, 18 Feb 2023 02:12:02 +0000 Subject: First functional prototype of database load and store. --- ttt.jai | 67 ++++++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 24 deletions(-) (limited to 'ttt.jai') diff --git a/ttt.jai b/ttt.jai index 585d7af..584548a 100644 --- a/ttt.jai +++ b/ttt.jai @@ -55,11 +55,15 @@ Task :: struct { name.data = cast(*~s8 u8) (0x80 ^ 0x01); // *name_data[0]; } -Database :: struct { - active_task : *~s64 Task = null; - selected_task : *~s64 Task = null; +DatabaseCore :: struct { + active_idx : s64; + selected_task : s64; modified_on : s64; total_times : [NUM_WEEK_DAYS] s64; +} + +Database :: struct { + #as using base : DatabaseCore; tasks : [..] Task; } @@ -1264,24 +1268,40 @@ Database :: struct { // also... the array_add // TODO WIP - //load_database(*db, db_file_path); - - task : Task; - memcpy(task.name.data, "bazinga".data, 7); - task.name.count = 7; - print(">>>'%'\n", task.name); - print("###%\n\n", task); + load_database(*db, db_file_path); - add_task(*db, *task); - store_database(db, db_file_path); +// task : Task; +// memcpy(task.name.data, "bazinga".data, 7); +// task.name.count = 7; +// { +// path := join(app_directory, "/", "test"); +// file := file_open(path, for_writing = true); +// file_write(*file, *task, size_of(Task)); +// file_close(*file); +// +// data: Task; +// file = file_open(path); +// file_read(file, *data, size_of(Task)); +// print("### > %\n", data); +// } +// array_add(*db.tasks, task); +// store_database(db, db_file_path); - //array_add(*db.tasks, task); - //memcpy(*db.tasks[0], *task, size_of(Task)); +// print("size_of([..]) = %\n", size_of([..] Task)); //print("www\n"); print("loaded: %\n", db); +// print(">>>'%'\n", task.name); +// print("###%\n\n", task); +// print(":%\n", size_of(type_of(db.tasks))); - + array_add :: (array: *[..] $T/Task, item: T) #no_abc { + print("my_array\n"); + maybe_grow(array); +// array.data[array.count] = item; + memcpy(*array.data[array.count], *item, size_of(T)); + array.count += 1; + } add_task :: (db: *Database, task: *Task) { idx := db.tasks.count; @@ -1290,7 +1310,6 @@ Database :: struct { memcpy(*db.tasks[idx], task, size_of(Task)); } - // Stores data from database into binary file. // Returns success. store_database :: (db: Database, path: string) -> success: bool { @@ -1305,7 +1324,9 @@ Database :: struct { } file_write(*file, DB_FILE_SIGN_STR); - file_write(*file, *db, size_of(Database)); + file_write(*file, *db, size_of(DatabaseCore)); + file_write(*file, *db.tasks.count, size_of(type_of(Database.tasks.count))); + file_write(*file, db.tasks.data, size_of(Task) * db.tasks.count); //fwrite(DB_FILE_SIGN, SIZEOF_CHAR, DB_FILE_SIGN_LENGTH, file); //fwrite(db, SIZEOF_DATABASE_ST, 1, file); //fwrite(db->tasks, SIZEOF_TASK_ST, db->count, file); @@ -1338,13 +1359,11 @@ Database :: struct { } // Read database structure. - - read_success = file_read(file, db, size_of(Database)); - //if read_success == false print_error("Failed to read database info from '%'.", path); - - - //file_open :: (name: string, for_writing := false, keep_existing_content := false, log_errors := true) -> File, bool - //file_read :: (f: File, vdata: *void, bytes_to_read: s64) -> (success: bool, total_read: s64) + read_success = file_read(file, db, size_of(DatabaseCore)); + tasks_count: s64; + file_read(file, *tasks_count, size_of(type_of(Database.tasks.count))); + array_resize(*db.tasks, tasks_count, initialize = false); + file_read(file, db.tasks.data, size_of(Task) * tasks_count); return true; } -- cgit v1.2.3