summaryrefslogtreecommitdiff
path: root/include/mbgl/storage/file_source_manager.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/storage/file_source_manager.hpp')
-rw-r--r--include/mbgl/storage/file_source_manager.hpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/include/mbgl/storage/file_source_manager.hpp b/include/mbgl/storage/file_source_manager.hpp
new file mode 100644
index 0000000000..2b2a43cbec
--- /dev/null
+++ b/include/mbgl/storage/file_source_manager.hpp
@@ -0,0 +1,50 @@
+#pragma once
+
+#include <mbgl/storage/file_source.hpp>
+
+namespace mbgl {
+
+class ResourceOptions;
+
+/**
+ * @brief A singleton class responsible for managing file sources.
+ *
+ * The FileSourceManager provides following functionality:
+ *
+ * - provides access to file sources of a specific type and configuration
+ * - caches previously created file sources of a (type, configuration) tuples
+ * - allows to register and unregister file source factories
+ */
+class FileSourceManager {
+public:
+ using FileSourceFactory = std::function<std::unique_ptr<FileSource>(const ResourceOptions&)>;
+
+ /**
+ * @brief A singleton getter.
+ *
+ * @return FileSourceManager*
+ */
+ static FileSourceManager* get() noexcept;
+
+ // Returns shared instance of a file source for (type, options) tuple.
+ // Creates new instance via registered factory if needed. If new instance cannot be
+ // created, nullptr would be returned.
+ std::shared_ptr<FileSource> getFileSource(FileSourceType, const ResourceOptions&) noexcept;
+
+ // Registers file source factory for a provided FileSourceType type. If factory for the
+ // same type was already registered, will unregister previously registered factory.
+ // Provided factory must not be null.
+ virtual void registerFileSourceFactory(FileSourceType, FileSourceFactory&&) noexcept;
+
+ // Unregisters file source factory. If there are no registered factories for a FileSourceType
+ // invocation has no effect.
+ virtual FileSourceFactory unRegisterFileSourceFactory(FileSourceType) noexcept;
+
+protected:
+ FileSourceManager();
+ class Impl;
+ std::unique_ptr<Impl> impl;
+ virtual ~FileSourceManager();
+};
+
+} // namespace mbgl