diff options
Diffstat (limited to 'include/mbgl')
25 files changed, 202 insertions, 83 deletions
diff --git a/include/mbgl/annotation/annotation.hpp b/include/mbgl/annotation/annotation.hpp index fb9ea5eba2..17728741bb 100644 --- a/include/mbgl/annotation/annotation.hpp +++ b/include/mbgl/annotation/annotation.hpp @@ -4,7 +4,6 @@ #include <mbgl/util/variant.hpp> #include <mbgl/util/color.hpp> #include <mbgl/style/property_value.hpp> -#include <mbgl/style/property_value.hpp> #include <cstdint> #include <vector> diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index b1d4b14e4f..ac0a398d25 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -60,7 +60,7 @@ public: bool isPanning() const; // Camera - CameraOptions getCameraOptions(const EdgeInsets& = {}) const; + CameraOptions getCameraOptions(optional<EdgeInsets> = {}) const; void jumpTo(const CameraOptions&); void easeTo(const CameraOptions&, const AnimationOptions&); void flyTo(const CameraOptions&, const AnimationOptions&); diff --git a/include/mbgl/map/map_observer.hpp b/include/mbgl/map/map_observer.hpp index a79f5ac82d..258699a2a6 100644 --- a/include/mbgl/map/map_observer.hpp +++ b/include/mbgl/map/map_observer.hpp @@ -34,6 +34,12 @@ public: Full }; + struct RenderFrameStatus { + RenderMode mode; + bool needsRepaint; // In continous mode, shows that there are ongoig transitions. + bool placementChanged; + }; + virtual void onCameraWillChange(CameraChangeMode) {} virtual void onCameraIsChanging() {} virtual void onCameraDidChange(CameraChangeMode) {} @@ -41,7 +47,7 @@ public: virtual void onDidFinishLoadingMap() {} virtual void onDidFailLoadingMap(MapLoadError, const std::string&) {} virtual void onWillStartRenderingFrame() {} - virtual void onDidFinishRenderingFrame(RenderMode) {} + virtual void onDidFinishRenderingFrame(RenderFrameStatus) {} virtual void onWillStartRenderingMap() {} virtual void onDidFinishRenderingMap(RenderMode) {} virtual void onDidFinishLoadingStyle() {} diff --git a/include/mbgl/renderer/renderer.hpp b/include/mbgl/renderer/renderer.hpp index 787f9dceee..f1800dbfb8 100644 --- a/include/mbgl/renderer/renderer.hpp +++ b/include/mbgl/renderer/renderer.hpp @@ -24,7 +24,6 @@ class RendererBackend; class Renderer { public: Renderer(gfx::RendererBackend&, float pixelRatio_, - const optional<std::string> programCacheDir = {}, const optional<std::string> localFontFamily = {}); ~Renderer(); diff --git a/include/mbgl/renderer/renderer_observer.hpp b/include/mbgl/renderer/renderer_observer.hpp index 4d21a0aaee..e0fc84215e 100644 --- a/include/mbgl/renderer/renderer_observer.hpp +++ b/include/mbgl/renderer/renderer_observer.hpp @@ -26,8 +26,8 @@ public: // Start of frame, initial is the first frame for this map virtual void onWillStartRenderingFrame() {} - // End of frame, boolean flags that a repaint is required - virtual void onDidFinishRenderingFrame(RenderMode, bool) {} + // End of frame, booleans flags that a repaint is required and that placement changed. + virtual void onDidFinishRenderingFrame(RenderMode, bool /*repaint*/, bool /*placementChanged*/) {} // Final frame virtual void onDidFinishRenderingMap() {} diff --git a/include/mbgl/storage/offline.hpp b/include/mbgl/storage/offline.hpp index f702f47edc..baf43dc5f5 100644 --- a/include/mbgl/storage/offline.hpp +++ b/include/mbgl/storage/offline.hpp @@ -129,6 +129,11 @@ public: uint64_t completedTileCount = 0; /** + * The number of tiles that are known to be required for this region. + */ + uint64_t requiredTileCount = 0; + + /** * The cumulative size, in bytes, of all tiles that have been fully downloaded. * This is a subset of `completedResourceSize`. */ diff --git a/include/mbgl/storage/resource.hpp b/include/mbgl/storage/resource.hpp index 40c4c836b1..d00f336669 100644 --- a/include/mbgl/storage/resource.hpp +++ b/include/mbgl/storage/resource.hpp @@ -1,11 +1,10 @@ #pragma once #include <mbgl/storage/response.hpp> +#include <mbgl/util/bitmask_operations.hpp> #include <mbgl/util/optional.hpp> #include <mbgl/util/font_stack.hpp> #include <mbgl/util/tileset.hpp> -#include <mbgl/util/util.hpp> -#include <mbgl/util/traits.hpp> #include <string> @@ -98,21 +97,8 @@ public: std::shared_ptr<const std::string> priorData; }; - -MBGL_CONSTEXPR Resource::LoadingMethod operator|(Resource::LoadingMethod a, Resource::LoadingMethod b) { - return Resource::LoadingMethod(mbgl::underlying_type(a) | mbgl::underlying_type(b)); -} - -MBGL_CONSTEXPR Resource::LoadingMethod& operator|=(Resource::LoadingMethod& a, Resource::LoadingMethod b) { - return (a = a | b); -} - -MBGL_CONSTEXPR Resource::LoadingMethod operator&(Resource::LoadingMethod a, Resource::LoadingMethod b) { - return Resource::LoadingMethod(mbgl::underlying_type(a) & mbgl::underlying_type(b)); -} - inline bool Resource::hasLoadingMethod(Resource::LoadingMethod method) { - return (loadingMethod & method) != Resource::LoadingMethod::None; + return (loadingMethod & method); } } // namespace mbgl diff --git a/include/mbgl/style/expression/dsl.hpp b/include/mbgl/style/expression/dsl.hpp index bcab999ab2..4abeac7989 100644 --- a/include/mbgl/style/expression/dsl.hpp +++ b/include/mbgl/style/expression/dsl.hpp @@ -1,13 +1,13 @@ #pragma once -#include <mbgl/style/expression/value.hpp> #include <mbgl/style/expression/expression.hpp> #include <mbgl/style/expression/interpolator.hpp> +#include <mbgl/style/expression/value.hpp> #include <mbgl/util/ignore.hpp> +#include <initializer_list> #include <memory> #include <string> -#include <initializer_list> namespace mbgl { namespace style { @@ -24,15 +24,18 @@ std::vector<std::unique_ptr<Expression>> vec(Args... args) { return result; } +std::unique_ptr<Expression> createExpression(const char* expr); +std::unique_ptr<Expression> createExpression(const mbgl::style::conversion::Convertible& expr); std::unique_ptr<Expression> error(std::string); std::unique_ptr<Expression> literal(const char* value); std::unique_ptr<Expression> literal(Value value); std::unique_ptr<Expression> literal(std::initializer_list<double> value); -std::unique_ptr<Expression> literal(std::initializer_list<const char *> value); +std::unique_ptr<Expression> literal(std::initializer_list<const char*> value); -std::unique_ptr<Expression> assertion(type::Type, std::unique_ptr<Expression>, - std::unique_ptr<Expression> def = nullptr); +std::unique_ptr<Expression> +assertion(type::Type, std::unique_ptr<Expression>, + std::unique_ptr<Expression> def = nullptr); std::unique_ptr<Expression> number(std::unique_ptr<Expression>, std::unique_ptr<Expression> def = nullptr); std::unique_ptr<Expression> string(std::unique_ptr<Expression>, @@ -46,21 +49,17 @@ std::unique_ptr<Expression> toString(std::unique_ptr<Expression>, std::unique_ptr<Expression> def = nullptr); std::unique_ptr<Expression> toFormatted(std::unique_ptr<Expression>, std::unique_ptr<Expression> def = nullptr); - + std::unique_ptr<Expression> get(const char* value); std::unique_ptr<Expression> get(std::unique_ptr<Expression>); std::unique_ptr<Expression> id(); std::unique_ptr<Expression> zoom(); -std::unique_ptr<Expression> eq(std::unique_ptr<Expression>, - std::unique_ptr<Expression>); -std::unique_ptr<Expression> ne(std::unique_ptr<Expression>, - std::unique_ptr<Expression>); -std::unique_ptr<Expression> gt(std::unique_ptr<Expression>, - std::unique_ptr<Expression>); -std::unique_ptr<Expression> lt(std::unique_ptr<Expression>, - std::unique_ptr<Expression>); +std::unique_ptr<Expression> eq(std::unique_ptr<Expression>, std::unique_ptr<Expression>); +std::unique_ptr<Expression> ne(std::unique_ptr<Expression>, std::unique_ptr<Expression>); +std::unique_ptr<Expression> gt(std::unique_ptr<Expression>, std::unique_ptr<Expression>); +std::unique_ptr<Expression> lt(std::unique_ptr<Expression>, std::unique_ptr<Expression>); std::unique_ptr<Expression> step(std::unique_ptr<Expression> input, std::unique_ptr<Expression> output0, @@ -86,7 +85,7 @@ std::unique_ptr<Expression> interpolate(Interpolator interpolator, double input3, std::unique_ptr<Expression> output3); std::unique_ptr<Expression> concat(std::vector<std::unique_ptr<Expression>> inputs); - + std::unique_ptr<Expression> format(const char* value); std::unique_ptr<Expression> format(std::unique_ptr<Expression>); diff --git a/include/mbgl/style/expression/expression.hpp b/include/mbgl/style/expression/expression.hpp index 5f66fc6dc7..ad57748677 100644 --- a/include/mbgl/style/expression/expression.hpp +++ b/include/mbgl/style/expression/expression.hpp @@ -31,6 +31,9 @@ public: EvaluationContext(float zoom_, GeometryTileFeature const * feature_) : zoom(zoom_), feature(feature_) {} + EvaluationContext(optional<mbgl::Value> accumulated_, GeometryTileFeature const * feature_) : + accumulated(std::move(accumulated_)), feature(feature_) + {} EvaluationContext(optional<float> zoom_, GeometryTileFeature const * feature_, optional<double> colorRampParameter_) : zoom(std::move(zoom_)), feature(feature_), colorRampParameter(std::move(colorRampParameter_)) {} @@ -41,6 +44,7 @@ public: }; optional<float> zoom; + optional<mbgl::Value> accumulated; GeometryTileFeature const * feature = nullptr; optional<double> colorRampParameter; // Contains formatted section object, std::unordered_map<std::string, Value>. @@ -162,7 +166,7 @@ public: type::Type getType() const { return type; }; EvaluationResult evaluate(optional<float> zoom, const Feature& feature, optional<double> colorRampParameter) const; - + EvaluationResult evaluate(optional<mbgl::Value> accumulated, const Feature& feature) const; /** * Statically analyze the expression, attempting to enumerate possible outputs. Returns * an array of values plus the sentinel null optional value, used to indicate that the diff --git a/include/mbgl/style/layer.hpp b/include/mbgl/style/layer.hpp index a66ff37b22..ecd3f01f70 100644 --- a/include/mbgl/style/layer.hpp +++ b/include/mbgl/style/layer.hpp @@ -1,11 +1,13 @@ #pragma once -#include <mbgl/util/peer.hpp> #include <mbgl/util/immutable.hpp> #include <mbgl/util/optional.hpp> #include <mbgl/style/types.hpp> #include <mbgl/style/conversion.hpp> +#include <mapbox/weak.hpp> +#include <mapbox/type_wrapper.hpp> + #include <cassert> #include <memory> #include <string> @@ -119,15 +121,20 @@ public: // For use in SDK bindings, which store a reference to a platform-native peer // object here, so that separately-obtained references to this object share // identical platform-native peers. - util::peer peer; + mapbox::base::TypeWrapper peer; Layer(Immutable<Impl>); const LayerTypeInfo* getTypeInfo() const noexcept; + mapbox::base::WeakPtr<Layer> makeWeakPtr() { + return weakFactory.makeWeakPtr(); + } + protected: virtual Mutable<Impl> mutableBaseImpl() const = 0; LayerObserver* observer; + mapbox::base::WeakPtrFactory<Layer> weakFactory {this}; }; } // namespace style diff --git a/include/mbgl/style/layers/symbol_layer.hpp b/include/mbgl/style/layers/symbol_layer.hpp index 2493df6046..853c0b282e 100644 --- a/include/mbgl/style/layers/symbol_layer.hpp +++ b/include/mbgl/style/layers/symbol_layer.hpp @@ -186,6 +186,10 @@ public: const PropertyValue<std::vector<TextVariableAnchorType>>& getTextVariableAnchor() const; void setTextVariableAnchor(const PropertyValue<std::vector<TextVariableAnchorType>>&); + static PropertyValue<std::vector<TextWritingModeType>> getDefaultTextWritingMode(); + const PropertyValue<std::vector<TextWritingModeType>>& getTextWritingMode() const; + void setTextWritingMode(const PropertyValue<std::vector<TextWritingModeType>>&); + // Paint properties static PropertyValue<Color> getDefaultIconColor(); diff --git a/include/mbgl/style/light.hpp b/include/mbgl/style/light.hpp index 0b65df9f1b..21a05cf4c8 100644 --- a/include/mbgl/style/light.hpp +++ b/include/mbgl/style/light.hpp @@ -2,6 +2,7 @@ #pragma once +#include <mbgl/style/conversion.hpp> #include <mbgl/style/property_value.hpp> #include <mbgl/style/transition_options.hpp> #include <mbgl/style/types.hpp> @@ -17,6 +18,9 @@ public: Light(); ~Light(); + // Dynamic properties + optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value); + static LightAnchorType getDefaultAnchor(); PropertyValue<LightAnchorType> getAnchor() const; void setAnchor(PropertyValue<LightAnchorType>); diff --git a/include/mbgl/style/light.hpp.ejs b/include/mbgl/style/light.hpp.ejs index adc5b651e3..c3001d982b 100644 --- a/include/mbgl/style/light.hpp.ejs +++ b/include/mbgl/style/light.hpp.ejs @@ -5,6 +5,7 @@ #pragma once +#include <mbgl/style/conversion.hpp> #include <mbgl/style/property_value.hpp> #include <mbgl/style/transition_options.hpp> #include <mbgl/style/types.hpp> @@ -20,6 +21,9 @@ public: Light(); ~Light(); + // Dynamic properties + optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value); + <% for (const property of properties) { -%> static <%- evaluatedType(property) %> getDefault<%- camelize(property.name) %>(); <%- propertyValueType(property) %> get<%- camelize(property.name) %>() const; diff --git a/include/mbgl/style/source.hpp b/include/mbgl/style/source.hpp index dc3a8d73fb..2507b67fdc 100644 --- a/include/mbgl/style/source.hpp +++ b/include/mbgl/style/source.hpp @@ -2,10 +2,12 @@ #include <mbgl/util/noncopyable.hpp> #include <mbgl/util/optional.hpp> -#include <mbgl/util/peer.hpp> #include <mbgl/util/immutable.hpp> #include <mbgl/style/types.hpp> +#include <mapbox/weak.hpp> +#include <mapbox/type_wrapper.hpp> + #include <memory> #include <string> @@ -77,7 +79,9 @@ public: // For use in SDK bindings, which store a reference to a platform-native peer // object here, so that separately-obtained references to this object share // identical platform-native peers. - util::peer peer; + mapbox::base::TypeWrapper peer; + + virtual mapbox::base::WeakPtr<Source> makeWeakPtr() = 0; }; } // namespace style diff --git a/include/mbgl/style/sources/custom_geometry_source.hpp b/include/mbgl/style/sources/custom_geometry_source.hpp index 3f29d0c0fb..a5e545f445 100644 --- a/include/mbgl/style/sources/custom_geometry_source.hpp +++ b/include/mbgl/style/sources/custom_geometry_source.hpp @@ -20,7 +20,7 @@ using TileFunction = std::function<void(const CanonicalTileID&)>; class CustomTileLoader; -class CustomGeometrySource : public Source { +class CustomGeometrySource final : public Source { public: struct TileOptions { double tolerance = 0.375; @@ -46,9 +46,13 @@ public: // Private implementation class Impl; const Impl& impl() const; + mapbox::base::WeakPtr<Source> makeWeakPtr() override { + return weakFactory.makeWeakPtr(); + } private: std::shared_ptr<ThreadPool> threadPool; std::unique_ptr<Actor<CustomTileLoader>> loader; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; }; template <> diff --git a/include/mbgl/style/sources/geojson_source.hpp b/include/mbgl/style/sources/geojson_source.hpp index a03b910279..c99687fad6 100644 --- a/include/mbgl/style/sources/geojson_source.hpp +++ b/include/mbgl/style/sources/geojson_source.hpp @@ -1,9 +1,14 @@ #pragma once +#include <mbgl/style/expression/expression.hpp> #include <mbgl/style/source.hpp> +#include <mbgl/util/constants.hpp> #include <mbgl/util/geojson.hpp> #include <mbgl/util/optional.hpp> -#include <mbgl/util/constants.hpp> + +#include <memory> +#include <unordered_map> +#include <utility> namespace mbgl { @@ -24,11 +29,15 @@ struct GeoJSONOptions { bool cluster = false; uint16_t clusterRadius = 50; uint8_t clusterMaxZoom = 17; + using ClusterExpression = std::pair<std::shared_ptr<mbgl::style::expression::Expression>, + std::shared_ptr<mbgl::style::expression::Expression>>; + using ClusterProperties = std::unordered_map<std::string, ClusterExpression>; + ClusterProperties clusterProperties; }; -class GeoJSONSource : public Source { +class GeoJSONSource final : public Source { public: - GeoJSONSource(const std::string& id, const GeoJSONOptions& = {}); + GeoJSONSource(const std::string& id, optional<GeoJSONOptions> = nullopt); ~GeoJSONSource() final; void setURL(const std::string& url); @@ -41,9 +50,14 @@ public: void loadDescription(FileSource&) final; + mapbox::base::WeakPtr<Source> makeWeakPtr() override { + return weakFactory.makeWeakPtr(); + } + private: optional<std::string> url; std::unique_ptr<AsyncRequest> req; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; }; template <> diff --git a/include/mbgl/style/sources/image_source.hpp b/include/mbgl/style/sources/image_source.hpp index 009764291f..84faab33c9 100644 --- a/include/mbgl/style/sources/image_source.hpp +++ b/include/mbgl/style/sources/image_source.hpp @@ -10,7 +10,7 @@ class AsyncRequest; namespace style { -class ImageSource : public Source { +class ImageSource final : public Source { public: ImageSource(std::string id, const std::array<LatLng, 4>); ~ImageSource() override; @@ -27,9 +27,14 @@ public: const Impl& impl() const; void loadDescription(FileSource&) final; + + mapbox::base::WeakPtr<Source> makeWeakPtr() override { + return weakFactory.makeWeakPtr(); + } private: optional<std::string> url; std::unique_ptr<AsyncRequest> req; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; }; template <> diff --git a/include/mbgl/style/sources/raster_source.hpp b/include/mbgl/style/sources/raster_source.hpp index 5aa81aa979..1bdced8da7 100644 --- a/include/mbgl/style/sources/raster_source.hpp +++ b/include/mbgl/style/sources/raster_source.hpp @@ -25,9 +25,14 @@ public: void loadDescription(FileSource&) final; + mapbox::base::WeakPtr<Source> makeWeakPtr() final { + return weakFactory.makeWeakPtr(); + } + private: const variant<std::string, Tileset> urlOrTileset; std::unique_ptr<AsyncRequest> req; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; }; template <> diff --git a/include/mbgl/style/sources/vector_source.hpp b/include/mbgl/style/sources/vector_source.hpp index 6f16974b40..97f0a7e5a8 100644 --- a/include/mbgl/style/sources/vector_source.hpp +++ b/include/mbgl/style/sources/vector_source.hpp @@ -10,9 +10,10 @@ class AsyncRequest; namespace style { -class VectorSource : public Source { +class VectorSource final : public Source { public: - VectorSource(std::string id, variant<std::string, Tileset> urlOrTileset); + VectorSource(std::string id, variant<std::string, Tileset> urlOrTileset, optional<float> maxZoom = nullopt, + optional<float> minZoom = nullopt); ~VectorSource() final; const variant<std::string, Tileset>& getURLOrTileset() const; @@ -23,9 +24,16 @@ public: void loadDescription(FileSource&) final; + mapbox::base::WeakPtr<Source> makeWeakPtr() override { + return weakFactory.makeWeakPtr(); + } + private: const variant<std::string, Tileset> urlOrTileset; std::unique_ptr<AsyncRequest> req; + mapbox::base::WeakPtrFactory<Source> weakFactory {this}; + optional<float> maxZoom; + optional<float> minZoom; }; template <> diff --git a/include/mbgl/style/types.hpp b/include/mbgl/style/types.hpp index 13a2e50f01..5d88dafb33 100644 --- a/include/mbgl/style/types.hpp +++ b/include/mbgl/style/types.hpp @@ -115,6 +115,11 @@ enum class IconTextFitType : uint8_t { Height }; +enum class TextWritingModeType : uint8_t { + Horizontal, + Vertical +}; + enum class LightAnchorType: bool { Map, Viewport diff --git a/include/mbgl/util/bitmask_operations.hpp b/include/mbgl/util/bitmask_operations.hpp new file mode 100644 index 0000000000..014fabdea2 --- /dev/null +++ b/include/mbgl/util/bitmask_operations.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include <mbgl/util/traits.hpp> +#include <mbgl/util/util.hpp> + +namespace mbgl { + +template<typename Enum> +MBGL_CONSTEXPR Enum operator|(Enum a, Enum b) { + static_assert(std::is_enum<Enum>::value, "Enum must be an enum type"); + return Enum(mbgl::underlying_type(a) | mbgl::underlying_type(b)); +} + +template<typename Enum> +MBGL_CONSTEXPR Enum& operator|=(Enum& a, Enum b) { + static_assert(std::is_enum<Enum>::value, "Enum must be an enum type"); + return (a = a | b); +} + +template<typename Enum> +MBGL_CONSTEXPR bool operator&(Enum a, Enum b) { + static_assert(std::is_enum<Enum>::value, "Enum must be an enum type"); + return bool(mbgl::underlying_type(a) & mbgl::underlying_type(b)); +} + +template<typename Enum> +MBGL_CONSTEXPR Enum operator~(Enum value) { + static_assert(std::is_enum<Enum>::value, "Enum must be an enum type"); + return Enum(~mbgl::underlying_type(value)); +} + + +} // namespace mbgl
\ No newline at end of file diff --git a/include/mbgl/util/color.hpp b/include/mbgl/util/color.hpp index 01a4c8f292..1ff44ce085 100644 --- a/include/mbgl/util/color.hpp +++ b/include/mbgl/util/color.hpp @@ -1,6 +1,7 @@ #pragma once #include <mbgl/util/optional.hpp> +#include <mbgl/util/feature.hpp> #include <cassert> #include <string> @@ -39,6 +40,7 @@ public: static optional<Color> parse(const std::string&); std::string stringify() const; std::array<double, 4> toArray() const; + mbgl::Value toObject() const; }; inline bool operator==(const Color& colorA, const Color& colorB) { diff --git a/include/mbgl/util/default_styles.hpp b/include/mbgl/util/default_styles.hpp new file mode 100644 index 0000000000..e1c53178b0 --- /dev/null +++ b/include/mbgl/util/default_styles.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include <array> +#include <string> +#include <vector> + +namespace mbgl { +namespace util { +namespace default_styles { + +struct DefaultStyle { + const char* url; + const char* name; + const unsigned currentVersion; +}; + +// clang-format off +constexpr const DefaultStyle streets = { "mapbox://styles/mapbox/streets-v11", "Streets", 11 }; +constexpr const DefaultStyle outdoors = { "mapbox://styles/mapbox/outdoors-v11", "Outdoors", 11 }; +constexpr const DefaultStyle light = { "mapbox://styles/mapbox/light-v10", "Light", 10 }; +constexpr const DefaultStyle dark = { "mapbox://styles/mapbox/dark-v10", "Dark", 10 }; +constexpr const DefaultStyle satellite = { "mapbox://styles/mapbox/satellite-v9", "Satellite", 9 }; +constexpr const DefaultStyle satelliteStreets = { "mapbox://styles/mapbox/satellite-streets-v11", "Satellite Streets", 11 }; +// clang-format on + +constexpr std::array<const DefaultStyle, 6> orderedStyles = { + {streets, outdoors, light, dark, satellite, satelliteStreets}}; + +constexpr size_t numOrderedStyles = orderedStyles.size(); + +} // end namespace default_styles +} // end namespace util +} // end namespace mbgl diff --git a/include/mbgl/util/peer.hpp b/include/mbgl/util/peer.hpp deleted file mode 100644 index d16efddb57..0000000000 --- a/include/mbgl/util/peer.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include <memory> -#include <type_traits> -#include <utility> - -namespace mbgl { -namespace util { - -class peer { -public: - peer() noexcept : storage(nullptr, noop_deleter) {} - - template <class T> - peer(T&& value) noexcept : storage(new std::decay_t<T>(std::forward<T>(value)), cast_deleter<std::decay_t<T>>) { - static_assert(!std::is_same<peer, std::decay_t<T>>::value, "Peer must not wrap itself."); - } - - bool has_value() const noexcept { return static_cast<bool>(storage); } - - template <class T> - T& get() noexcept { return *reinterpret_cast<T*>(storage.get()); } - -private: - template <typename T> - static void cast_deleter(void* ptr) noexcept { delete reinterpret_cast<T*>(ptr); } - static void noop_deleter(void*) noexcept {} - - using storage_t = std::unique_ptr<void, void(*)(void*)>; - storage_t storage; -}; - -} // namespace util -} // namespace mbgl diff --git a/include/mbgl/util/util.hpp b/include/mbgl/util/util.hpp index 7960b40299..52d9ad85b7 100644 --- a/include/mbgl/util/util.hpp +++ b/include/mbgl/util/util.hpp @@ -19,3 +19,26 @@ #else #define MBGL_CONSTEXPR inline #endif + +// Compiler defines for making symbols visible, otherwise they +// will be defined as hidden by default. + +// clang-format off +#if defined WIN32 + #ifdef MBGL_BUILDING_LIB + #ifdef __GNUC__ + #define MBGL_EXPORT __attribute__((dllexport)) + #else + #define MBGL_EXPORT __declspec(dllexport) + #endif + #else + #ifdef __GNUC__ + #define MBGL_EXPORT __attribute__((dllimport)) + #else + #define MBGL_EXPORT __declspec(dllimport) + #endif + #endif +#else + #define MBGL_EXPORT __attribute__((visibility ("default"))) // NOLINT +#endif +// clang-format on |