summaryrefslogtreecommitdiff
path: root/src/mbgl/platform/factory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/platform/factory.cpp')
-rw-r--r--src/mbgl/platform/factory.cpp27
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