From b7dc84bdd79db2250cd35a4a45f90b8f171aee05 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 23 Jul 2018 15:19:18 -0700 Subject: [PATCH] Also sort the keys --- mvt.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/mvt.cpp b/mvt.cpp index ea61f6e..b3e5d28 100644 --- a/mvt.cpp +++ b/mvt.cpp @@ -636,14 +636,21 @@ void mvt_layer::tag_v3(mvt_feature &feature, std::string key, mvt_value value) { void mvt_layer::reorder_values() { std::vector orig_values = values; + std::vector orig_keys = keys; std::sort(values.begin(), values.end()); + std::sort(keys.begin(), keys.end()); std::map new_value_map; for (size_t i = 0; i < values.size(); i++) { new_value_map.insert(std::pair(values[i], i)); } + std::map new_key_map; + for (size_t i = 0; i < keys.size(); i++) { + new_key_map.insert(std::pair(keys[i], i)); + } + for (size_t i = 0; i < features.size(); i++) { for (size_t j = 1; j < features[i].tags.size(); j += 2) { mvt_value v = orig_values[features[i].tags[j]]; @@ -652,12 +659,18 @@ void mvt_layer::reorder_values() { if (f == new_value_map.end()) { std::string vs = v.toString(); fprintf(stderr, "Internal error: value %s was lost\n", vs.c_str()); -#if 0 - for (auto a = new_value_map.begin(); a != new_value_map.end(); ++a) { - std::string const vs2 = a->first.toString(); - fprintf(stderr, "%s: %zu\n", vs2.c_str(), a->second); - } -#endif + exit(EXIT_FAILURE); + } + + features[i].tags[j] = f->second; + } + + for (size_t j = 0; j < features[i].tags.size(); j += 2) { + std::string k = orig_keys[features[i].tags[j]]; + auto f = new_key_map.find(k); + + if (f == new_key_map.end()) { + fprintf(stderr, "Internal error: key %s was lost\n", k.c_str()); exit(EXIT_FAILURE); }