From 61dd31f4c4c1ccb6a9d7185e51cd040f4c61fea3 Mon Sep 17 00:00:00 2001 From: Tommy Volk Date: Sun, 25 Oct 2026 18:13:29 -0500 Subject: [PATCH] perf(encoding): reuse one program traversal Collect postorder entries once to obtain the node count and encode the same entries, avoiding repeated traversal and sharing-map work at the cost of temporary node storage. Written by OpenAI Codex. --- src/bit_encoding/encode.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/bit_encoding/encode.rs b/src/bit_encoding/encode.rs index e7cff1f1..f4c812a0 100644 --- a/src/bit_encoding/encode.rs +++ b/src/bit_encoding/encode.rs @@ -157,13 +157,13 @@ pub fn encode_program( program: &node::Node, w: &mut BitWriter<&mut dyn io::Write>, ) -> io::Result { - let iter = EncodeNode::Node(program).post_order_iter::>(); - - let len = iter.clone().count(); + let nodes: Vec<_> = EncodeNode::Node(program) + .post_order_iter::>() + .collect(); let n_start = w.n_total_written(); - encode_natural(len, w)?; + encode_natural(nodes.len(), w)?; - for node in iter { + for node in nodes { encode_node(node, w)?; }