#include #include #include #include #include #include #include #include #include using namespace mbgl; LiveTileData::LiveTileData(const TileID& id_, std::unique_ptr tile_, Style& style_, const SourceInfo& source_, std::function callback) : TileData(id_), worker(style_.workers), tileWorker(id_, source_.source_id, style_, style_.layers, state, std::make_unique(0, 0, false)), tile(std::move(tile_)) { state = State::loaded; if (!tile) { state = State::parsed; return; } reparse(callback); } bool LiveTileData::reparse(std::function callback) { if (parsing || (state != State::loaded && state != State::partial)) { return false; } parsing = true; workRequest = worker.parseLiveTile(tileWorker, *tile, [this, callback] (TileParseResult result) { parsing = false; if (result.is()) { state = result.get(); } else { error = result.get(); state = State::obsolete; } callback(); }); return true; } LiveTileData::~LiveTileData() { cancel(); } Bucket* LiveTileData::getBucket(const StyleLayer& layer) { if (!isReady() || !layer.bucket) { return nullptr; } return tileWorker.getBucket(layer); } void LiveTileData::cancel() { state = State::obsolete; workRequest.reset(); }