[core] Ensure that TileWorker can retain tileData after layout
This commit is contained in:
@@ -40,6 +40,10 @@ optional<Value> AnnotationTileFeature::getValue(const std::string& key) const {
|
||||
AnnotationTileLayer::AnnotationTileLayer(std::string name_)
|
||||
: name(std::move(name_)) {}
|
||||
|
||||
std::unique_ptr<GeometryTileData> AnnotationTileData::clone() const {
|
||||
return std::make_unique<AnnotationTileData>(*this);
|
||||
}
|
||||
|
||||
const GeometryTileLayer* AnnotationTileData::getLayer(const std::string& name) const {
|
||||
auto it = layers.find(name);
|
||||
if (it != layers.end()) {
|
||||
|
||||
@@ -56,6 +56,7 @@ private:
|
||||
|
||||
class AnnotationTileData : public GeometryTileData {
|
||||
public:
|
||||
std::unique_ptr<GeometryTileData> clone() const override;
|
||||
const GeometryTileLayer* getLayer(const std::string&) const override;
|
||||
|
||||
std::unordered_map<std::string, AnnotationTileLayer> layers;
|
||||
|
||||
@@ -55,6 +55,10 @@ public:
|
||||
: features(std::move(features_)) {
|
||||
}
|
||||
|
||||
std::unique_ptr<GeometryTileData> clone() const override {
|
||||
return std::make_unique<GeoJSONTileData>(*this);
|
||||
}
|
||||
|
||||
const GeometryTileLayer* getLayer(const std::string&) const override {
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -66,6 +66,8 @@ void GeometryTile::setData(std::unique_ptr<const GeometryTileData> data_) {
|
||||
workRequest.reset();
|
||||
availableData = DataAvailability::All;
|
||||
buckets.clear();
|
||||
featureIndex.reset();
|
||||
data.reset();
|
||||
redoPlacement();
|
||||
observer->onTileLoaded(*this, true);
|
||||
return;
|
||||
|
||||
@@ -51,6 +51,7 @@ public:
|
||||
class GeometryTileData {
|
||||
public:
|
||||
virtual ~GeometryTileData() = default;
|
||||
virtual std::unique_ptr<GeometryTileData> clone() const = 0;
|
||||
virtual const GeometryTileLayer* getLayer(const std::string&) const = 0;
|
||||
};
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ TileParseResult TileWorker::prepareResult(const PlacementConfig& config) {
|
||||
if (result.complete) {
|
||||
featureIndex->setCollisionTile(placeLayers(config));
|
||||
result.featureIndex = std::move(featureIndex);
|
||||
result.tileData = std::move(tileData);
|
||||
result.tileData = tileData->clone();
|
||||
}
|
||||
|
||||
return std::move(result);
|
||||
|
||||
@@ -59,6 +59,10 @@ class VectorTileData : public GeometryTileData {
|
||||
public:
|
||||
VectorTileData(std::shared_ptr<const std::string> data);
|
||||
|
||||
std::unique_ptr<GeometryTileData> clone() const override {
|
||||
return std::make_unique<VectorTileData>(*this);
|
||||
}
|
||||
|
||||
const GeometryTileLayer* getLayer(const std::string&) const override;
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user