move from range-based for loop to iterator for to be clearer

This commit is contained in:
Justin R. Miller
2015-03-08 14:18:46 -07:00
committed by John Firebaugh
parent fbb2d17f43
commit a45ae199cf
5 changed files with 23 additions and 11 deletions

View File

@@ -73,7 +73,17 @@ protected:
class GeometryFilteredTileLayer {
public:
class iterator {};
class iterator {
public:
virtual ~iterator();
void operator++();
bool operator!=(const iterator&) const;
GeometryTileFeature& operator*() const;
protected:
iterator();
};
public:
virtual ~GeometryFilteredTileLayer();

View File

@@ -217,14 +217,15 @@ void TileParser::addBucketGeometries(Bucket& bucket, const GeometryTileLayer& la
std::unique_ptr<GeometryFilteredTileLayer> filtered_layer = layer.createFilteredTileLayer(filter);
for (auto feature : *filtered_layer) {
for (auto feature_it = filtered_layer->begin(); feature_it != filtered_layer->end(); ++feature_it) {
if (obsolete())
return;
GeometryCollection geometry = feature.nextGeometry();
GeometryCollection geometry = (*feature_it).nextGeometry();
while (geometry.size()) {
bucket->addGeometry(geometry);
geometry = feature.nextGeometry();
geometry = (*feature_it).nextGeometry();
}
}
}

View File

@@ -241,6 +241,7 @@ bool FilteredVectorTileLayer::iterator::operator!=(const iterator& other) const
return !(feature == other.feature);
}
const VectorTileFeature& FilteredVectorTileLayer::iterator::operator*() const {
return feature;
VectorTileFeature& FilteredVectorTileLayer::iterator::operator*() const {
VectorTileFeature* f = const_cast<VectorTileFeature *>(&feature);
return *f;
}

View File

@@ -33,7 +33,7 @@ public:
iterator(const FilteredVectorTileLayer&, const pbf&);
void operator++();
bool operator!=(const iterator&) const;
const VectorTileFeature& operator*() const;
VectorTileFeature& operator*() const;
private:
const FilteredVectorTileLayer& parent;

View File

@@ -68,12 +68,12 @@ std::vector<SymbolFeature> SymbolBucket::processFeatures(const GeometryTileLayer
std::unique_ptr<GeometryFilteredTileLayer> filtered_layer = layer.createFilteredTileLayer(filter);
for (auto feature : *filtered_layer) {
for (auto feature_it = filtered_layer->begin(); feature_it != filtered_layer->end(); ++feature_it) {
SymbolFeature ft;
if (has_text) {
std::string u8string = util::replaceTokens(layout.text.field, feature.getProperties());
std::string u8string = util::replaceTokens(layout.text.field, (*feature_it).getProperties());
if (layout.text.transform == TextTransformType::Uppercase) {
u8string = platform::uppercase(u8string);
@@ -92,14 +92,14 @@ std::vector<SymbolFeature> SymbolBucket::processFeatures(const GeometryTileLayer
}
if (has_icon) {
ft.sprite = util::replaceTokens(layout.icon.image, feature.getProperties());
ft.sprite = util::replaceTokens(layout.icon.image, (*feature_it).getProperties());
}
if (ft.label.length() || ft.sprite.length()) {
auto &multiline = ft.geometry;
GeometryCollection geometryCollection = feature.nextGeometry();
GeometryCollection geometryCollection = (*feature_it).nextGeometry();
multiline.emplace_back();
for (auto& geometry : geometryCollection) {
const GeometryLine& line = geometry.get<GeometryLine>();