aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/filesystem/asset_database.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/filesystem/asset_database.cpp')
-rw-r--r--src/libjin/filesystem/asset_database.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/libjin/filesystem/asset_database.cpp b/src/libjin/filesystem/asset_database.cpp
new file mode 100644
index 0000000..e532f41
--- /dev/null
+++ b/src/libjin/filesystem/asset_database.cpp
@@ -0,0 +1,85 @@
+#include "../core/configuration.h"
+#if defined(jin_filesystem)
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h> /* defines FILENAME_MAX */
+
+#include "../common/exception.h"
+
+#include "asset_database.h"
+
+namespace JinEngine
+{
+ namespace Filesystem
+ {
+
+ AssetDatabase* AssetDatabase::mAssetDatabase = 0;
+
+ AssetDatabase::AssetDatabase()
+ {
+ mSmt = smtnewshared();
+ }
+
+ AssetDatabase* AssetDatabase::get()
+ {
+ return mAssetDatabase ? mAssetDatabase : (mAssetDatabase = new AssetDatabase());
+ }
+
+ void AssetDatabase::mount(const char * path)
+ {
+ int err = smtmount(mSmt, path);
+ if (err)
+ {
+ printf("%s mounted path %s", smterrstr(err), path);
+ exit(1);
+ }
+ }
+
+ void AssetDatabase::read(const char* path, Buffer& buffer)
+ {
+ size_t size;
+ byte* data = (byte*)smtread(mSmt, path, &size);
+ if (data == nullptr)
+ throw Exception("Could not read file %s.", path);
+ buffer.bind(data, size);
+ }
+
+ Buffer* read(const char* path)
+ {
+ return nullptr;
+ }
+
+ void* AssetDatabase::read(const char* path, unsigned int* len)
+ {
+ return smtread(mSmt, path, len);
+ }
+
+ const char* AssetDatabase::getFull(const char* path)
+ {
+ return smtfullpath(mSmt, path);
+ }
+
+ bool AssetDatabase::isDir(const char* path)
+ {
+ return smtisdir(mSmt, path);
+ }
+
+ bool AssetDatabase::isFile(const char* path)
+ {
+ return smtisreg(mSmt, path);
+ }
+
+ bool AssetDatabase::exists(const char* path)
+ {
+ return smtexists(mSmt, path) == 0;
+ }
+/*
+ std::vector<std::string> AssetDatabase::getFiles(const char* path, bool recursive)
+ {
+ }
+*/
+ } // namespace Filesystem
+} // namespace JinEngine
+
+#endif // jin_filesystem \ No newline at end of file