summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
Diffstat (limited to 'platform')
-rw-r--r--platform/android/android.cmake1
-rw-r--r--platform/default/src/mbgl/sourcemanager/source_manager.cpp87
-rw-r--r--platform/ios/ios.cmake1
-rw-r--r--platform/linux/linux.cmake1
-rw-r--r--platform/macos/macos.cmake1
-rw-r--r--platform/qt/qt.cmake1
6 files changed, 92 insertions, 0 deletions
diff --git a/platform/android/android.cmake b/platform/android/android.cmake
index b4dd48e7db..2d1997595a 100644
--- a/platform/android/android.cmake
+++ b/platform/android/android.cmake
@@ -70,6 +70,7 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread_local.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/utf.cpp
$<$<BOOL:${MBGL_PUBLIC_BUILD}>:${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp>
+ $<$<BOOL:${MBGL_PUBLIC_BUILD}>:${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/sourcemanager/source_manager.cpp>
${PROJECT_SOURCE_DIR}/platform/linux/src/headless_backend_egl.cpp
)
diff --git a/platform/default/src/mbgl/sourcemanager/source_manager.cpp b/platform/default/src/mbgl/sourcemanager/source_manager.cpp
new file mode 100644
index 0000000000..9af26fe4ef
--- /dev/null
+++ b/platform/default/src/mbgl/sourcemanager/source_manager.cpp
@@ -0,0 +1,87 @@
+#include <map>
+#include <mbgl/layermanager/layer_manager.hpp>
+#include <mbgl/sourcemanager/annotation_source_factory.hpp>
+#include <mbgl/sourcemanager/custom_geometry_source_factory.hpp>
+#include <mbgl/sourcemanager/geojson_source_factory.hpp>
+#include <mbgl/sourcemanager/image_source_factory.hpp>
+#include <mbgl/sourcemanager/raster_dem_source_factory.hpp>
+#include <mbgl/sourcemanager/raster_source_factory.hpp>
+#include <mbgl/sourcemanager/source_manager.hpp>
+#include <mbgl/sourcemanager/vector_source_factory.hpp>
+#include <mbgl/util/logging.hpp>
+#include <memory>
+#include <vector>
+
+namespace mbgl {
+
+class SourceManagerDefault final : public SourceManager {
+public:
+ SourceManagerDefault();
+
+private:
+ void addSourceType(std::unique_ptr<SourceFactory>);
+ // SourceManager overrides.
+ SourceFactory* getFactory(const std::string& type) noexcept final;
+ SourceFactory* getFactory(const style::SourceTypeInfo*) noexcept final;
+
+ std::vector<std::unique_ptr<SourceFactory>> factories;
+ std::map<std::string, SourceFactory*> typeToFactory;
+};
+
+SourceManagerDefault::SourceManagerDefault() {
+ if (LayerManager::annotationsEnabled) {
+ addSourceType(std::make_unique<AnnotationSourceFactory>());
+ }
+#if !defined(MBGL_SOURCE_CUSTOM_GEOMETRY_DISABLE_ALL)
+ addSourceType(std::make_unique<CustomGeometrySourceFactory>());
+#endif
+#if !defined(MBGL_SOURCE_GEOJSON_DISABLE_ALL)
+ addSourceType(std::make_unique<GeoJSONSourceFactory>());
+#endif
+#if !defined(MBGL_SOURCE_IMAGE_DISABLE_ALL)
+ addSourceType(std::make_unique<ImageSourceFactory>());
+#endif
+#if !defined(MBGL_SOURCE_RASTER_DEM_DISABLE_ALL)
+ addSourceType(std::make_unique<RasterDEMSourceFactory>());
+#endif
+#if !defined(MBGL_SOURCE_RASTER_DISABLE_ALL)
+ addSourceType(std::make_unique<RasterSourceFactory>());
+#endif
+#if !defined(MBGL_SOURCE_VECTOR_DISABLE_ALL)
+ addSourceType(std::make_unique<VectorSourceFactory>());
+#endif
+}
+
+void SourceManagerDefault::addSourceType(std::unique_ptr<SourceFactory> factory) {
+ std::string type{factory->getTypeInfo()->type};
+ if (!type.empty()) {
+ typeToFactory.emplace(std::make_pair(std::move(type), factory.get()));
+ } else {
+ Log::Warning(Event::Setup, "Failure adding source factory. getTypeInfo() returned an empty type string.");
+ }
+ factories.emplace_back(std::move(factory));
+}
+
+SourceFactory* SourceManagerDefault::getFactory(const mbgl::style::SourceTypeInfo* typeInfo) noexcept {
+ assert(typeInfo);
+ for (const auto& factory : factories) {
+ if (factory->getTypeInfo() == typeInfo) {
+ return factory.get();
+ }
+ }
+ assert(false);
+ return nullptr;
+}
+
+SourceFactory* SourceManagerDefault::getFactory(const std::string& type) noexcept {
+ auto search = typeToFactory.find(type);
+ return (search != typeToFactory.end()) ? search->second : nullptr;
+}
+
+// static
+SourceManager* SourceManager::get() noexcept {
+ static SourceManagerDefault instance;
+ return &instance;
+}
+
+} // namespace mbgl
diff --git a/platform/ios/ios.cmake b/platform/ios/ios.cmake
index cc231c0123..d6ff1fea0d 100644
--- a/platform/ios/ios.cmake
+++ b/platform/ios/ios.cmake
@@ -48,6 +48,7 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_backend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_frontend.cpp
$<$<BOOL:${MBGL_PUBLIC_BUILD}>:${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp>
+ $<$<BOOL:${MBGL_PUBLIC_BUILD}>:${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/sourcemanager/source_manager.cpp>
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/map/map_snapshotter.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp
diff --git a/platform/linux/linux.cmake b/platform/linux/linux.cmake
index d8d11e1d4a..b0db7e3928 100644
--- a/platform/linux/linux.cmake
+++ b/platform/linux/linux.cmake
@@ -18,6 +18,7 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/i18n/collator.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/i18n/number_format.cpp
$<$<BOOL:${MBGL_PUBLIC_BUILD}>:${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp>
+ $<$<BOOL:${MBGL_PUBLIC_BUILD}>:${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/sourcemanager/source_manager.cpp>
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/database_file_source.cpp
diff --git a/platform/macos/macos.cmake b/platform/macos/macos.cmake
index 4d2091de65..d09fc74de0 100644
--- a/platform/macos/macos.cmake
+++ b/platform/macos/macos.cmake
@@ -39,6 +39,7 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_backend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_frontend.cpp
$<$<BOOL:${MBGL_PUBLIC_BUILD}>:${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp>
+ $<$<BOOL:${MBGL_PUBLIC_BUILD}>:${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/sourcemanager/source_manager.cpp>
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/map/map_snapshotter.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp
diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake
index 50db75c695..0705c0dc05 100644
--- a/platform/qt/qt.cmake
+++ b/platform/qt/qt.cmake
@@ -31,6 +31,7 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gl/headless_backend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/i18n/collator.cpp
$<$<BOOL:${MBGL_PUBLIC_BUILD}>:${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp>
+ $<$<BOOL:${MBGL_PUBLIC_BUILD}>:${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/sourcemanager/source_manager.cpp>
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/database_file_source.cpp