From ee03f5a0465e176e220060164a5ffc408f73ed0d Mon Sep 17 00:00:00 2001 From: Brett Snyder Date: Wed, 15 May 2019 07:22:03 -0500 Subject: optimize map:fold recursion --- gen/src/map_dict.erl | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'gen') diff --git a/gen/src/map_dict.erl b/gen/src/map_dict.erl index e72b92d..5155ec7 100644 --- a/gen/src/map_dict.erl +++ b/gen/src/map_dict.erl @@ -75,12 +75,15 @@ update(Dict, Key, F) -> put(Dict, Key, F({error, not_found})) end. -fold(Dict, Acc, F) -> - Kvs = to_list(Dict), - case Kvs of +do_fold(List, Acc, F) -> + case List of [] -> Acc; - [{K, V} | _] -> - fold(delete(Dict, K), F(K, V, Acc), F) + [{K, V} | Tail] -> + do_fold(Tail, F(K, V, Acc), F) end. + +fold(Dict, Acc, F) -> + Kvs = to_list(Dict), + do_fold(Kvs, Acc, F). -- cgit v1.2.3