summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2015-10-29 11:55:56 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2015-10-30 11:17:00 -0700
commitf6f5d9608d29a27b67e3b6702740c443deba06ac (patch)
tree872fab289553ba0762d9a9f8d24a616b1e63b72b /src
parentee6d415bf2bd8b3ab72f9178635392d3abaa779e (diff)
downloadqtlocation-mapboxgl-f6f5d9608d29a27b67e3b6702740c443deba06ac.tar.gz
[core] Separate type for RasterTileParseResult
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/map/raster_tile_data.cpp12
-rw-r--r--src/mbgl/util/worker.cpp14
-rw-r--r--src/mbgl/util/worker.hpp6
3 files changed, 14 insertions, 18 deletions
diff --git a/src/mbgl/map/raster_tile_data.cpp b/src/mbgl/map/raster_tile_data.cpp
index 16f727bac7..2427e9f55d 100644
--- a/src/mbgl/map/raster_tile_data.cpp
+++ b/src/mbgl/map/raster_tile_data.cpp
@@ -57,19 +57,15 @@ void RasterTileData::request(float pixelRatio,
state = State::loaded;
}
- workRequest = worker.parseRasterTile(std::make_unique<RasterBucket>(texturePool, layout), res.data, [this, callback] (TileParseResult result) {
+ workRequest = worker.parseRasterTile(std::make_unique<RasterBucket>(texturePool, layout), res.data, [this, callback] (RasterTileParseResult result) {
workRequest.reset();
if (state != State::loaded) {
return;
}
- if (result.is<TileParseResultBuckets>()) {
- auto& buckets = result.get<TileParseResultBuckets>();
- state = buckets.state;
- // TODO: Make this less awkward; we're only getting one bucket back.
- if (!buckets.buckets.empty()) {
- bucket = std::move(buckets.buckets.front().second);
- }
+ if (result.is<std::unique_ptr<Bucket>>()) {
+ state = State::parsed;
+ bucket = std::move(result.get<std::unique_ptr<Bucket>>());
} else {
std::stringstream message;
message << "Failed to parse [" << std::string(id) << "]: " << result.get<std::string>();
diff --git a/src/mbgl/util/worker.cpp b/src/mbgl/util/worker.cpp
index 6d43367091..b0005eda6f 100644
--- a/src/mbgl/util/worker.cpp
+++ b/src/mbgl/util/worker.cpp
@@ -16,21 +16,17 @@ public:
void parseRasterTile(std::unique_ptr<RasterBucket> bucket,
const std::shared_ptr<const std::string> data,
- std::function<void(TileParseResult)> callback) {
+ std::function<void(RasterTileParseResult)> callback) {
std::unique_ptr<util::Image> image(new util::Image(*data));
if (!(*image)) {
- callback(TileParseResult("error parsing raster image"));
+ callback(RasterTileParseResult("error parsing raster image"));
}
if (!bucket->setImage(std::move(image))) {
- callback(TileParseResult("error setting raster image to bucket"));
+ callback(RasterTileParseResult("error setting raster image to bucket"));
}
- TileParseResultBuckets result;
- result.buckets.emplace_back("raster", std::move(bucket));
- result.state = TileData::State::parsed;
-
- callback(std::move(result));
+ callback(RasterTileParseResult(std::move(bucket)));
}
void parseGeometryTile(TileWorker* worker,
@@ -74,7 +70,7 @@ Worker::~Worker() = default;
std::unique_ptr<WorkRequest>
Worker::parseRasterTile(std::unique_ptr<RasterBucket> bucket,
const std::shared_ptr<const std::string> data,
- std::function<void(TileParseResult)> callback) {
+ std::function<void(RasterTileParseResult)> callback) {
current = (current + 1) % threads.size();
return threads[current]->invokeWithCallback(&Worker::Impl::parseRasterTile, callback, bucket,
data);
diff --git a/src/mbgl/util/worker.hpp b/src/mbgl/util/worker.hpp
index 6bf16216d4..e7bd3daada 100644
--- a/src/mbgl/util/worker.hpp
+++ b/src/mbgl/util/worker.hpp
@@ -14,6 +14,10 @@ class WorkRequest;
class RasterBucket;
class GeometryTileLoader;
+using RasterTileParseResult = mapbox::util::variant<
+ std::unique_ptr<Bucket>, // success
+ std::string>; // error
+
class Worker : public mbgl::util::noncopyable {
public:
explicit Worker(std::size_t count);
@@ -33,7 +37,7 @@ public:
Request parseRasterTile(std::unique_ptr<RasterBucket> bucket,
std::shared_ptr<const std::string> data,
- std::function<void(TileParseResult)> callback);
+ std::function<void(RasterTileParseResult)> callback);
Request parseGeometryTile(TileWorker&,
std::unique_ptr<GeometryTile>,