summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin R. Miller <incanus@codesorcery.net>2015-03-08 16:12:44 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2015-03-09 11:57:34 -0700
commit7361f8566bc22f27a55de399bef23a03b4026094 (patch)
treed68e2b9b1f5f0dbbf3ebef915d2399fce518e991 /src
parenta45ae199cf37976d34301a024be31ef427c34892 (diff)
downloadqtlocation-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.hpp28
-rw-r--r--src/mbgl/map/tile_parser.cpp15
-rw-r--r--src/mbgl/map/tile_parser.hpp8
-rw-r--r--src/mbgl/map/vector_tile.cpp8
-rw-r--r--src/mbgl/map/vector_tile.hpp3
-rw-r--r--src/mbgl/renderer/symbol_bucket.cpp6
-rw-r--r--src/mbgl/renderer/symbol_bucket.hpp4
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);