#include "myguidatamanager.hpp" #include #include #include #include #include namespace { class DataStream final : public MyGUI::DataStream { public: explicit DataStream(std::unique_ptr&& stream) : MyGUI::DataStream(stream.get()) , mOwnedStream(std::move(stream)) {} private: std::unique_ptr mOwnedStream; }; } namespace osgMyGUI { void DataManager::setResourcePath(const std::string &path) { mResourcePath = path; } DataManager::DataManager(const std::string& resourcePath, const VFS::Manager* vfs) : mResourcePath(resourcePath) , mVfs(vfs) { } MyGUI::IDataStream *DataManager::getData(const std::string &name) const { return new DataStream(mVfs->get(mResourcePath + "/" + name)); } void DataManager::freeData(MyGUI::IDataStream *data) { delete data; } bool DataManager::isDataExist(const std::string &name) const { return mVfs->exists(mResourcePath + "/" + name); } const MyGUI::VectorString &DataManager::getDataListNames(const std::string &pattern) const { throw std::runtime_error("DataManager::getDataListNames is not implemented - VFS is used"); } const std::string &DataManager::getDataPath(const std::string &name) const { static std::string result; result.clear(); if (name.empty()) return mResourcePath; if (!isDataExist(name)) return result; result = mResourcePath + "/" + name; return result; } }