diff options
Diffstat (limited to 'src/libjin/filesystem/asset_database.cpp')
-rw-r--r-- | src/libjin/filesystem/asset_database.cpp | 85 |
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 |