diff options
author | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2017-09-25 11:38:04 -0700 |
---|---|---|
committer | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2017-10-10 16:51:48 -0700 |
commit | 24dff5b4f4ae781dd4ab1b814cc0b2a46b158d80 (patch) | |
tree | 15153d99a92c888dbb6a17801cd432105311c1d8 /include | |
parent | 1624a523105b709259e7222cf645598c342e0a9e (diff) | |
download | qtlocation-mapboxgl-24dff5b4f4ae781dd4ab1b814cc0b2a46b158d80.tar.gz |
actor ref-actor
Diffstat (limited to 'include')
-rw-r--r-- | include/mbgl/style/sources/custom_vector_source.hpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/include/mbgl/style/sources/custom_vector_source.hpp b/include/mbgl/style/sources/custom_vector_source.hpp index a256c8e7f7..78835f2bed 100644 --- a/include/mbgl/style/sources/custom_vector_source.hpp +++ b/include/mbgl/style/sources/custom_vector_source.hpp @@ -5,30 +5,47 @@ #include <mbgl/util/geo.hpp> #include <mbgl/util/geojson.hpp> #include <mbgl/util/variant.hpp> +#include <mbgl/actor/actor_ref.hpp> +#include <mbgl/util/noncopyable.hpp> namespace mbgl { namespace style { struct Error { std::string message; }; -using FetchTileResult = variant< - mapbox::geojson::geojson, - Error>; +using SetTileDataFunction = std::function<void(const CanonicalTileID& tileID, const mapbox::geojson::geojson&)>; +using TileFunction = std::function<void(const CanonicalTileID&)>; -using FetchTileCallback = std::function<void(const CanonicalTileID& tileID, const FetchTileResult&)>; -using FetchTileFunction = std::function<void(const CanonicalTileID&, FetchTileCallback)>; +class CustomTileLoader : private util::noncopyable { +public: + CustomTileLoader(TileFunction&& fetchTileFn, TileFunction&& cancelTileFn); + ~CustomTileLoader(); + void fetchTile(const CanonicalTileID& tileID, ActorRef<SetTileDataFunction> callbackRef); + void cancelTile(const CanonicalTileID& tileID); + void setTileData(const CanonicalTileID& tileID, const mapbox::geojson::geojson& data); + void removeTile(const CanonicalTileID& tileID); +private: + class Impl; + Impl* impl = nullptr; +}; class CustomVectorSource : public Source { public: CustomVectorSource(std::string id, GeoJSONOptions options, - FetchTileFunction fetchTile); + TileFunction fetchTile, + TileFunction cancelTile); void loadDescription(FileSource&) final; + void setTileData(const CanonicalTileID&, const mapbox::geojson::geojson& geojson); // Private implementation class Impl; const Impl& impl() const; +private: + std::shared_ptr<Mailbox> mailbox; + CustomTileLoader loader; + }; template <> |