diff --git a/include/llmr/map/tile_data.hpp b/include/llmr/map/tile_data.hpp index b89784c75..b0312b5e3 100644 --- a/include/llmr/map/tile_data.hpp +++ b/include/llmr/map/tile_data.hpp @@ -11,6 +11,8 @@ #include #include +#include + #include #include #include @@ -30,7 +32,6 @@ namespace llmr { class Style; class Raster; -class Bucket; class LayerDescription; class BucketDescription; @@ -87,7 +88,7 @@ public: // Holds the buckets of this tile. // They contain the location offsets in the buffers stored above - std::map> buckets; + std::map> buckets; private: // Source data diff --git a/include/llmr/map/tile_parser.hpp b/include/llmr/map/tile_parser.hpp index 26d1cbc50..b99f9aaf9 100644 --- a/include/llmr/map/tile_parser.hpp +++ b/include/llmr/map/tile_parser.hpp @@ -14,11 +14,11 @@ private: bool obsolete() const; void parseGlyphs(); void parseStyleLayers(const std::vector& layers); - std::shared_ptr createBucket(const BucketDescription& bucket_desc); - std::shared_ptr createFillBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); - std::shared_ptr createLineBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); - std::shared_ptr createPointBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); - std::shared_ptr createTextBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); + std::unique_ptr createBucket(const BucketDescription& bucket_desc); + std::unique_ptr createFillBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); + std::unique_ptr createLineBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); + std::unique_ptr createPointBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); + std::unique_ptr createTextBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); template void addBucketFeatures(Bucket& bucket, const VectorTileLayer& layer, const BucketDescription& bucket_desc); private: diff --git a/src/map/tile_parser.cpp b/src/map/tile_parser.cpp index 1592f6b90..c21b6b961 100644 --- a/src/map/tile_parser.cpp +++ b/src/map/tile_parser.cpp @@ -6,6 +6,8 @@ #include #include +#include + using namespace llmr; @@ -58,11 +60,11 @@ void TileParser::parseStyleLayers(const std::vector& layers) { if (bucket_it != style.buckets.end()) { // Only create the new bucket if we have an actual specification // for it. - std::shared_ptr bucket = createBucket(bucket_it->second); + std::unique_ptr bucket = createBucket(bucket_it->second); if (bucket) { // Bucket creation might fail because the data tile may not // contain any data that falls into this bucket. - tile.buckets[layer_desc.bucket_name] = bucket; + tile.buckets[layer_desc.bucket_name] = std::move(bucket); } } else { // There is no proper specification for this bucket, even though @@ -74,7 +76,7 @@ void TileParser::parseStyleLayers(const std::vector& layers) { } } -std::shared_ptr TileParser::createBucket(const BucketDescription& bucket_desc) { +std::unique_ptr TileParser::createBucket(const BucketDescription& bucket_desc) { auto layer_it = data.layers.find(bucket_desc.source_layer); if (layer_it != data.layers.end()) { const VectorTileLayer& layer = layer_it->second; @@ -111,28 +113,28 @@ void TileParser::addBucketFeatures(Bucket& bucket, const VectorTileLayer& layer, } } -std::shared_ptr TileParser::createFillBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { - std::shared_ptr bucket = std::make_shared( +std::unique_ptr TileParser::createFillBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { + std::unique_ptr bucket = std::make_unique( tile.fillVertexBuffer, tile.triangleElementsBuffer, tile.lineElementsBuffer, bucket_desc); addBucketFeatures(bucket, layer, bucket_desc); - return obsolete() ? nullptr : bucket; + return obsolete() ? nullptr : std::move(bucket); } -std::shared_ptr TileParser::createLineBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { - std::shared_ptr bucket = std::make_shared( +std::unique_ptr TileParser::createLineBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { + std::unique_ptr bucket = std::make_unique( tile.lineVertexBuffer, tile.triangleElementsBuffer, tile.pointElementsBuffer, bucket_desc); addBucketFeatures(bucket, layer, bucket_desc); - return obsolete() ? nullptr : bucket; + return obsolete() ? nullptr : std::move(bucket); } -std::shared_ptr TileParser::createPointBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { - std::shared_ptr bucket = std::make_shared( +std::unique_ptr TileParser::createPointBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { + std::unique_ptr bucket = std::make_unique( tile.pointVertexBuffer, bucket_desc); addBucketFeatures(bucket, layer, bucket_desc); - return obsolete() ? nullptr : bucket; + return obsolete() ? nullptr : std::move(bucket); } -std::shared_ptr TileParser::createTextBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { +std::unique_ptr TileParser::createTextBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc) { // Determine the correct text stack. if (!layer.shaping.size()) { return nullptr; @@ -153,7 +155,7 @@ std::shared_ptr TileParser::createTextBucket(const VectorTileLayer& laye faces.push_back(&it->second); } - std::shared_ptr bucket = std::make_shared( + std::unique_ptr bucket = std::make_unique( tile.textVertexBuffer, tile.triangleElementsBuffer, bucket_desc, placement); FilteredVectorTileLayer filtered_layer(layer, bucket_desc); @@ -162,5 +164,5 @@ std::shared_ptr TileParser::createTextBucket(const VectorTileLayer& laye bucket->addFeature({ feature_pbf, layer }, faces, shaping); } - return bucket; + return std::move(bucket); }