aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/filesystem/asset_database.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-01-12 21:48:33 +0800
committerchai <chaifix@163.com>2019-01-12 21:48:33 +0800
commit8b00d67febf133e89f6a0bfabc41feed555dc4a9 (patch)
treefe48ef17c250afa40c2588300fcdb5920dba6951 /src/libjin/filesystem/asset_database.cpp
parenta907c39756ef6b368d06643afa491c49a9044a8e (diff)
*去掉文件前缀je_
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