mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 16:35:40 +02:00
Lazily initialize layer key and values maps when actually needed
This commit is contained in:
@@ -278,13 +278,6 @@ bool mvt_tile::decode(std::string &message, bool &was_compressed) {
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < layer.keys.size(); i++) {
|
||||
layer.key_map.insert(std::pair<std::string, size_t>(layer.keys[i], i));
|
||||
}
|
||||
for (size_t i = 0; i < layer.values.size(); i++) {
|
||||
layer.value_map.insert(std::pair<mvt_value, size_t>(layer.values[i], i));
|
||||
}
|
||||
|
||||
layers.push_back(layer);
|
||||
break;
|
||||
}
|
||||
@@ -593,6 +586,18 @@ std::string mvt_value::toString() const {
|
||||
void mvt_layer::tag(mvt_feature &feature, std::string key, mvt_value value) {
|
||||
size_t ko, vo;
|
||||
|
||||
// initialize lazily the first time anyone tags an attribute
|
||||
// to save the time of doing it in decode, which never actually matters.
|
||||
// only tile writers actually need this.
|
||||
if (key_map.size() == 0) {
|
||||
for (size_t i = 0; i < keys.size(); i++) {
|
||||
key_map.insert(std::pair<std::string, size_t>(keys[i], i));
|
||||
}
|
||||
for (size_t i = 0; i < values.size(); i++) {
|
||||
value_map.insert(std::pair<mvt_value, size_t>(values[i], i));
|
||||
}
|
||||
}
|
||||
|
||||
std::unordered_map<std::string, size_t>::iterator ki = key_map.find(key);
|
||||
std::unordered_map<mvt_value, size_t>::iterator vi = value_map.find(value);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user