diff options
author | Justin R. Miller <incanus@codesorcery.net> | 2015-03-08 16:12:44 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2015-03-09 11:57:34 -0700 |
commit | 7361f8566bc22f27a55de399bef23a03b4026094 (patch) | |
tree | d68e2b9b1f5f0dbbf3ebef915d2399fce518e991 /src | |
parent | a45ae199cf37976d34301a024be31ef427c34892 (diff) | |
download | qtlocation-mapboxgl-7361f8566bc22f27a55de399bef23a03b4026094.tar.gz |
move to shared pointers for queried layers passed to buckets
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/map/geometry_tile.hpp | 28 | ||||
-rw-r--r-- | src/mbgl/map/tile_parser.cpp | 15 | ||||
-rw-r--r-- | src/mbgl/map/tile_parser.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/map/vector_tile.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/map/vector_tile.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.hpp | 4 |
7 files changed, 28 insertions, 44 deletions
diff --git a/src/mbgl/map/geometry_tile.hpp b/src/mbgl/map/geometry_tile.hpp index fdca905208..a8105a5002 100644 --- a/src/mbgl/map/geometry_tile.hpp +++ b/src/mbgl/map/geometry_tile.hpp @@ -5,6 +5,7 @@ #include <mbgl/style/value.hpp> #include <mbgl/text/glyph.hpp> #include <mbgl/util/optional.hpp> +#include <mbgl/util/ptr.hpp> #include <mbgl/util/variant.hpp> #include <mbgl/util/vec.hpp> @@ -39,15 +40,10 @@ class GeometryTileLayer; class GeometryTileFeature { public: - virtual ~GeometryTileFeature(); - virtual uint64_t getID() const = 0; virtual GeometryFeatureType getType() const = 0; virtual std::map<std::string, Value> getProperties() const = 0; virtual GeometryCollection nextGeometry() = 0; - -protected: - GeometryTileFeature(); }; std::ostream& operator<<(std::ostream&, const GeometryTileFeature& feature); @@ -75,32 +71,20 @@ class GeometryFilteredTileLayer { public: class iterator { public: - virtual ~iterator(); - void operator++(); bool operator!=(const iterator&) const; GeometryTileFeature& operator*() const; - - protected: - iterator(); }; public: - virtual ~GeometryFilteredTileLayer(); - virtual iterator begin() const = 0; virtual iterator end() const = 0; - -protected: - GeometryFilteredTileLayer(); }; std::ostream& operator<<(std::ostream&, const PositionedGlyph&); class GeometryTileLayer { public: - virtual ~GeometryTileLayer(); - virtual const std::string getName() const = 0; virtual uint32_t getExtent() const = 0; virtual const std::vector<std::string> getKeys() const = 0; @@ -108,19 +92,11 @@ public: virtual const std::vector<Value> getValues() const = 0; virtual const std::map<std::string, std::map<Value, Shaping>> getShaping() const = 0; virtual std::unique_ptr<GeometryFilteredTileLayer> createFilteredTileLayer(const FilterExpression&) const = 0; - -protected: - GeometryTileLayer(); }; class GeometryTile { public: - virtual ~GeometryTile(); - - virtual std::map<std::string, const GeometryTileLayer> getLayers() const = 0; - -protected: - GeometryTile(); + virtual const util::ptr<const GeometryTileLayer> getLayer(const std::string&) const = 0; }; } diff --git a/src/mbgl/map/tile_parser.cpp b/src/mbgl/map/tile_parser.cpp index c75a19b9de..73426a2d1e 100644 --- a/src/mbgl/map/tile_parser.cpp +++ b/src/mbgl/map/tile_parser.cpp @@ -187,9 +187,8 @@ std::unique_ptr<Bucket> TileParser::createBucket(const StyleBucket &bucketDesc) if (tile.id.z >= std::ceil(bucketDesc.max_zoom)) return nullptr; if (bucketDesc.visibility == mbgl::VisibilityType::None) return nullptr; - auto layer_it = vectorTile.getLayers().find(bucketDesc.source_layer); - if (layer_it != vectorTile.getLayers().end()) { - const GeometryTileLayer& layer = layer_it->second; + const util::ptr<const GeometryTileLayer> layer = vectorTile.getLayer(bucketDesc.source_layer); + if (layer.get() != nullptr) { if (bucketDesc.type == StyleLayerType::Fill) { return createFillBucket(layer, bucketDesc); } else if (bucketDesc.type == StyleLayerType::Line) { @@ -213,9 +212,9 @@ std::unique_ptr<Bucket> TileParser::createBucket(const StyleBucket &bucketDesc) } template <class Bucket> -void TileParser::addBucketGeometries(Bucket& bucket, const GeometryTileLayer& layer, const FilterExpression &filter) { +void TileParser::addBucketGeometries(Bucket& bucket, const util::ptr<const GeometryTileLayer> layer, const FilterExpression &filter) { - std::unique_ptr<GeometryFilteredTileLayer> filtered_layer = layer.createFilteredTileLayer(filter); + std::unique_ptr<GeometryFilteredTileLayer> filtered_layer = layer->createFilteredTileLayer(filter); for (auto feature_it = filtered_layer->begin(); feature_it != filtered_layer->end(); ++feature_it) { @@ -230,7 +229,7 @@ void TileParser::addBucketGeometries(Bucket& bucket, const GeometryTileLayer& la } } -std::unique_ptr<Bucket> TileParser::createFillBucket(const GeometryTileLayer& layer, +std::unique_ptr<Bucket> TileParser::createFillBucket(const util::ptr<const GeometryTileLayer> layer, const StyleBucket &bucket_desc) { auto fill = parseStyleLayoutFill(bucket_desc, tile.id.z); auto bucket = util::make_unique<FillBucket>(std::move(fill), @@ -241,7 +240,7 @@ std::unique_ptr<Bucket> TileParser::createFillBucket(const GeometryTileLayer& la return obsolete() ? nullptr : std::move(bucket); } -std::unique_ptr<Bucket> TileParser::createLineBucket(const GeometryTileLayer& layer, +std::unique_ptr<Bucket> TileParser::createLineBucket(const util::ptr<const GeometryTileLayer> layer, const StyleBucket &bucket_desc) { auto line = parseStyleLayoutLine(bucket_desc, tile.id.z); auto bucket = util::make_unique<LineBucket>(std::move(line), @@ -252,7 +251,7 @@ std::unique_ptr<Bucket> TileParser::createLineBucket(const GeometryTileLayer& la return obsolete() ? nullptr : std::move(bucket); } -std::unique_ptr<Bucket> TileParser::createSymbolBucket(const GeometryTileLayer& layer, +std::unique_ptr<Bucket> TileParser::createSymbolBucket(const util::ptr<const GeometryTileLayer> layer, const StyleBucket &bucket_desc) { auto symbol = parseStyleLayoutSymbol(bucket_desc, tile.id.z); auto bucket = util::make_unique<SymbolBucket>(std::move(symbol), *collision); diff --git a/src/mbgl/map/tile_parser.hpp b/src/mbgl/map/tile_parser.hpp index 841ae1749c..90a9037fd3 100644 --- a/src/mbgl/map/tile_parser.hpp +++ b/src/mbgl/map/tile_parser.hpp @@ -53,11 +53,11 @@ private: void parseStyleLayers(util::ptr<const StyleLayerGroup> group); std::unique_ptr<Bucket> createBucket(const StyleBucket& bucketDesc); - std::unique_ptr<Bucket> createFillBucket(const GeometryTileLayer& layer, const StyleBucket& bucketDesc); - std::unique_ptr<Bucket> createLineBucket(const GeometryTileLayer& layer, const StyleBucket& bucketDesc); - std::unique_ptr<Bucket> createSymbolBucket(const GeometryTileLayer& layer, const StyleBucket& bucketDesc); + std::unique_ptr<Bucket> createFillBucket(const util::ptr<const GeometryTileLayer> layer, const StyleBucket& bucketDesc); + std::unique_ptr<Bucket> createLineBucket(const util::ptr<const GeometryTileLayer> layer, const StyleBucket& bucketDesc); + std::unique_ptr<Bucket> createSymbolBucket(const util::ptr<const GeometryTileLayer> layer, const StyleBucket& bucketDesc); - template <class Bucket> void addBucketGeometries(Bucket& bucket, const GeometryTileLayer& layer, const FilterExpression& filter); + template <class Bucket> void addBucketGeometries(Bucket& bucket, const util::ptr<const GeometryTileLayer> layer, const FilterExpression& filter); private: const VectorTile vectorTile; diff --git a/src/mbgl/map/vector_tile.cpp b/src/mbgl/map/vector_tile.cpp index cdd93d4bbe..0728608321 100644 --- a/src/mbgl/map/vector_tile.cpp +++ b/src/mbgl/map/vector_tile.cpp @@ -119,6 +119,14 @@ VectorTile& VectorTile::operator=(VectorTile&& other) { return *this; } +const util::ptr<const GeometryTileLayer> VectorTile::getLayer(const std::string& name) const { + auto layer_it = layers.find(name); + if (layer_it != layers.end()) { + return std::make_shared<const VectorTileLayer>(layer_it->second); + } + return nullptr; +} + VectorTileLayer::VectorTileLayer(pbf layer_pbf) : feature_pbf(layer_pbf) { while (layer_pbf.next()) { diff --git a/src/mbgl/map/vector_tile.hpp b/src/mbgl/map/vector_tile.hpp index 63efbab488..5fc6764b69 100644 --- a/src/mbgl/map/vector_tile.hpp +++ b/src/mbgl/map/vector_tile.hpp @@ -3,6 +3,7 @@ #include <mbgl/map/geometry_tile.hpp> #include <mbgl/style/filter_expression.hpp> +#include <mbgl/util/ptr.hpp> namespace mbgl { @@ -82,7 +83,7 @@ public: VectorTile(pbf); VectorTile& operator=(VectorTile&&); - virtual std::map<std::string, const GeometryTileLayer> getLayers() const; + virtual const util::ptr<const GeometryTileLayer> getLayer(const std::string&) const; private: std::map<std::string, const VectorTileLayer> layers; diff --git a/src/mbgl/renderer/symbol_bucket.cpp b/src/mbgl/renderer/symbol_bucket.cpp index 50a0f3c557..53833a7599 100644 --- a/src/mbgl/renderer/symbol_bucket.cpp +++ b/src/mbgl/renderer/symbol_bucket.cpp @@ -49,7 +49,7 @@ void SymbolBucket::addGlyphsToAtlas(uint64_t tileid, const std::string stackname glyphAtlas.addGlyphs(tileid, text, stackname, fontStack,face); } -std::vector<SymbolFeature> SymbolBucket::processFeatures(const GeometryTileLayer& layer, +std::vector<SymbolFeature> SymbolBucket::processFeatures(const util::ptr<const GeometryTileLayer> layer, const FilterExpression &filter, GlyphStore &glyphStore, const Sprite &sprite) { @@ -66,7 +66,7 @@ std::vector<SymbolFeature> SymbolBucket::processFeatures(const GeometryTileLayer // Determine and load glyph ranges std::set<GlyphRange> ranges; - std::unique_ptr<GeometryFilteredTileLayer> filtered_layer = layer.createFilteredTileLayer(filter); + std::unique_ptr<GeometryFilteredTileLayer> filtered_layer = layer->createFilteredTileLayer(filter); for (auto feature_it = filtered_layer->begin(); feature_it != filtered_layer->end(); ++feature_it) { @@ -123,7 +123,7 @@ std::vector<SymbolFeature> SymbolBucket::processFeatures(const GeometryTileLayer return features; } -void SymbolBucket::addFeatures(const GeometryTileLayer& layer, const FilterExpression &filter, +void SymbolBucket::addFeatures(const util::ptr<const GeometryTileLayer> layer, const FilterExpression &filter, const Tile::ID &id, SpriteAtlas &spriteAtlas, Sprite &sprite, GlyphAtlas & glyphAtlas, GlyphStore &glyphStore) { auto &layout = *styleLayout; diff --git a/src/mbgl/renderer/symbol_bucket.hpp b/src/mbgl/renderer/symbol_bucket.hpp index 0f9e8faa31..9d2d002a63 100644 --- a/src/mbgl/renderer/symbol_bucket.hpp +++ b/src/mbgl/renderer/symbol_bucket.hpp @@ -65,7 +65,7 @@ public: bool hasTextData() const; bool hasIconData() const; - void addFeatures(const GeometryTileLayer& layer, const FilterExpression &filter, + void addFeatures(const util::ptr<const GeometryTileLayer> layer, const FilterExpression &filter, const Tile::ID &id, SpriteAtlas &spriteAtlas, Sprite &sprite, GlyphAtlas &glyphAtlas, GlyphStore &glyphStore); @@ -78,7 +78,7 @@ public: private: - std::vector<SymbolFeature> processFeatures(const GeometryTileLayer& layer, const FilterExpression &filter, GlyphStore &glyphStore, const Sprite &sprite); + std::vector<SymbolFeature> processFeatures(const util::ptr<const GeometryTileLayer> layer, const FilterExpression &filter, GlyphStore &glyphStore, const Sprite &sprite); void addFeature(const std::vector<Coordinate> &line, const Shaping &shaping, const GlyphPositions &face, const Rect<uint16_t> &image); |