performance improvements for loops
diff --git a/include/inja/renderer.hpp b/include/inja/renderer.hpp
index fcb2bcd..d62bdb6 100644
--- a/include/inja/renderer.hpp
+++ b/include/inja/renderer.hpp
@@ -500,16 +500,17 @@
(*current_loop_data)["parent"] = std::move(tmp);
}
+ size_t index = 0;
for (auto it = result->begin(); it != result->end(); ++it) {
json_loop_data[static_cast<std::string>(node.value)] = *it;
- size_t index = std::distance(result->begin(), it);
(*current_loop_data)["index"] = index;
(*current_loop_data)["index1"] = index + 1;
(*current_loop_data)["is_first"] = (index == 0);
(*current_loop_data)["is_last"] = (index == result->size() - 1);
node.body.accept(*this);
+ ++index;
}
json_loop_data[static_cast<std::string>(node.value)].clear();
@@ -531,17 +532,18 @@
(*current_loop_data)["parent"] = std::move(*current_loop_data);
}
+ size_t index = 0;
for (auto it = result->begin(); it != result->end(); ++it) {
json_loop_data[static_cast<std::string>(node.key)] = it.key();
json_loop_data[static_cast<std::string>(node.value)] = it.value();
- size_t index = std::distance(result->begin(), it);
(*current_loop_data)["index"] = index;
(*current_loop_data)["index1"] = index + 1;
(*current_loop_data)["is_first"] = (index == 0);
(*current_loop_data)["is_last"] = (index == result->size() - 1);
node.body.accept(*this);
+ ++index;
}
json_loop_data[static_cast<std::string>(node.key)].clear();
diff --git a/single_include/inja/inja.hpp b/single_include/inja/inja.hpp
index b9ccd7c..281ae54 100644
--- a/single_include/inja/inja.hpp
+++ b/single_include/inja/inja.hpp
@@ -3759,16 +3759,17 @@
(*current_loop_data)["parent"] = std::move(tmp);
}
+ size_t index = 0;
for (auto it = result->begin(); it != result->end(); ++it) {
json_loop_data[static_cast<std::string>(node.value)] = *it;
- size_t index = std::distance(result->begin(), it);
(*current_loop_data)["index"] = index;
(*current_loop_data)["index1"] = index + 1;
(*current_loop_data)["is_first"] = (index == 0);
(*current_loop_data)["is_last"] = (index == result->size() - 1);
node.body.accept(*this);
+ ++index;
}
json_loop_data[static_cast<std::string>(node.value)].clear();
@@ -3790,17 +3791,18 @@
(*current_loop_data)["parent"] = std::move(*current_loop_data);
}
+ size_t index = 0;
for (auto it = result->begin(); it != result->end(); ++it) {
json_loop_data[static_cast<std::string>(node.key)] = it.key();
json_loop_data[static_cast<std::string>(node.value)] = it.value();
- size_t index = std::distance(result->begin(), it);
(*current_loop_data)["index"] = index;
(*current_loop_data)["index1"] = index + 1;
(*current_loop_data)["is_first"] = (index == 0);
(*current_loop_data)["is_last"] = (index == result->size() - 1);
node.body.accept(*this);
+ ++index;
}
json_loop_data[static_cast<std::string>(node.key)].clear();