diff options
Diffstat (limited to 'src/mbgl/platform/factory.cpp')
-rw-r--r-- | src/mbgl/platform/factory.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mbgl/platform/factory.cpp b/src/mbgl/platform/factory.cpp new file mode 100644 index 0000000000..6f595f9866 --- /dev/null +++ b/src/mbgl/platform/factory.cpp @@ -0,0 +1,27 @@ +#include <mbgl/platform/factory.hpp> +#include <mbgl/storage/default_file_source.hpp> + +namespace mbgl { +namespace platform { + +std::shared_ptr<FileSource> Factory::sharedFileSource(const FileSourceOptions& options, std::shared_ptr<FileSource> initial) { + static std::weak_ptr<FileSource> weak; + + if (initial) { + // We can only assign a custom initial value if the weak pointer object has zero references. + assert(weak.use_count() == 0); + weak = initial; + } + + std::shared_ptr<FileSource> strong = weak.lock(); + if (!strong) { + auto defaultFileSource = std::make_shared<DefaultFileSource>(options.cachePath(), options.assetRoot(), options.maximumCacheSize()); + defaultFileSource->setAccessToken(options.accessToken()); + weak = strong = defaultFileSource; + } + + return strong; +} + +} // namespace platform +} // namespace mbgl |