diff options
Diffstat (limited to 'platform')
-rw-r--r-- | platform/android/android.cmake | 1 | ||||
-rw-r--r-- | platform/default/src/mbgl/sourcemanager/source_manager.cpp | 87 | ||||
-rw-r--r-- | platform/ios/ios.cmake | 1 | ||||
-rw-r--r-- | platform/linux/linux.cmake | 1 | ||||
-rw-r--r-- | platform/macos/macos.cmake | 1 | ||||
-rw-r--r-- | platform/qt/qt.cmake | 1 |
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 |