| Index: src/zone-inl.h
|
| ===================================================================
|
| --- src/zone-inl.h (revision 2947)
|
| +++ src/zone-inl.h (working copy)
|
| @@ -276,12 +276,19 @@
|
| }
|
|
|
|
|
| -template <typename Node, class Callback>
|
| -static void DoForEach(Node* node, Callback* callback) {
|
| - if (node == NULL) return;
|
| - DoForEach<Node, Callback>(node->left(), callback);
|
| - callback->Call(node->key(), node->value());
|
| - DoForEach<Node, Callback>(node->right(), callback);
|
| +template <typename Config> template <class Callback>
|
| +void ZoneSplayTree<Config>::ForEach(Callback* callback) {
|
| + // Pre-allocate some space for tiny trees.
|
| + ZoneList<Node*> nodes_to_visit(10);
|
| + nodes_to_visit.Add(root_);
|
| + int pos = 0;
|
| + while (pos < nodes_to_visit.length()) {
|
| + Node* node = nodes_to_visit[pos++];
|
| + if (node == NULL) continue;
|
| + callback->Call(node->key(), node->value());
|
| + nodes_to_visit.Add(node->left());
|
| + nodes_to_visit.Add(node->right());
|
| + }
|
| }
|
|
|
|
|
|
|