From e00953606557cc309f1e8d7c37c36b2a6b31bd5a Mon Sep 17 00:00:00 2001 From: Jordan Bancino Date: Mon, 24 Oct 2022 12:44:29 -0400 Subject: [PATCH] Begin prototyping persistent storage API --- src/Db.c | 104 +++++++++++++++++++++++++++++++++++++++++++++++ src/include/Db.h | 52 ++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 src/Db.c create mode 100644 src/include/Db.h diff --git a/src/Db.c b/src/Db.c new file mode 100644 index 0000000..f8287f8 --- /dev/null +++ b/src/Db.c @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2022 Jordan Bancino <@jordan:bancino.net> + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include + +#include + +#include + +struct Db +{ + const char *dir; + size_t cacheSize; + pthread_mutex_t lock; +}; + +struct DbRef +{ + pthread_mutex_t lock; +}; + +Db * +DbOpen(const char *dir, size_t cache) +{ + Db *db; + + if (!dir) + { + return NULL; + } + + db = Malloc(sizeof(Db)); + if (!db) + { + return NULL; + } + + db->dir = dir; + db->cacheSize = cache; + + pthread_mutex_init(&db->lock, NULL); + + if (db->cacheSize) + { + + } + + return db; +} + +void +DbClose(Db * db) +{ + if (!db) + { + return; + } + + Free(db); +} + +DbRef * +DbCreate(Db * db, char *prefix, char *key) +{ + return NULL; +} + +DbRef * +DbLock(Db * db, char *prefix, char *key) +{ + return NULL; +} + +void +DbUnlock(Db * db, DbRef * ref) +{ + return; +} + +HashMap * +DbJson(DbRef * ref) +{ + return NULL; +} diff --git a/src/include/Db.h b/src/include/Db.h new file mode 100644 index 0000000..142c2c4 --- /dev/null +++ b/src/include/Db.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2022 Jordan Bancino <@jordan:bancino.net> + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#ifndef TELODENDRIA_DB_H +#define TELODENDRIA_DB_H + +#include + +#include + +typedef struct Db Db; +typedef struct DbRef DbRef; + +extern Db * + DbOpen(const char *, size_t); + +extern void + DbClose(Db *); + +extern DbRef * + DbCreate(Db *, char *, char *); + +extern DbRef * + DbLock(Db *, char *, char *); + +extern void + DbUnlock(Db *, DbRef *); + +extern HashMap * + DbJson(DbRef *); + +#endif