diff options
author | Björn Gustavsson <[email protected]> | 2016-12-16 12:50:28 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2016-12-19 11:54:06 +0100 |
commit | a2d92dff3a8acc534daeeb3dea5edda406a6ab0d (patch) | |
tree | a61765af69f9cca94879083422571be3c959bd8c /lib/stdlib/test/dict_test_lib.erl | |
parent | 8362491325db87bd7d561399f8ef8c849df22d33 (diff) | |
download | otp-a2d92dff3a8acc534daeeb3dea5edda406a6ab0d.tar.gz otp-a2d92dff3a8acc534daeeb3dea5edda406a6ab0d.tar.bz2 otp-a2d92dff3a8acc534daeeb3dea5edda406a6ab0d.zip |
Add take/2 to all dictionary modules
Similar to maps:take/2, add take/2 to the other dictionary
modules in STDLIB:
orddict:take(Key, Dict) -> {Val,NewDict} | 'error'.
dict:take(Key, Dict) -> {Val,NewDict} | 'error'.
gb_trees:take(Key, Dict) -> {Val,NewDict}.
For gb_trees also add:
gb_trees:take_any(Key, Dict) -> {Val,NewDict} | 'error'.
gb_trees already has delete() and delete_any(), so we will
follow that design pattern.
Suggested by Boris Bochkaryov in https://github.com/erlang/otp/pull/1209.
Diffstat (limited to 'lib/stdlib/test/dict_test_lib.erl')
-rw-r--r-- | lib/stdlib/test/dict_test_lib.erl | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/stdlib/test/dict_test_lib.erl b/lib/stdlib/test/dict_test_lib.erl index 7c4c3572ae..f6fef7bdf4 100644 --- a/lib/stdlib/test/dict_test_lib.erl +++ b/lib/stdlib/test/dict_test_lib.erl @@ -33,7 +33,9 @@ new(Mod, Eq) -> (iterator, S) -> Mod:iterator(S); (iterator_from, {Start, S}) -> Mod:iterator_from(Start, S); (next, I) -> Mod:next(I); - (to_list, D) -> to_list(Mod, D) + (to_list, D) -> to_list(Mod, D); + (erase, {K,D}) -> erase(Mod, K, D); + (take, {K,D}) -> take(Mod, K, D) end. empty(Mod) -> @@ -67,3 +69,19 @@ enter(Mod, Key, Val, Dict) -> true -> Mod:store(Key, Val, Dict) end. + +erase(Mod, Key, Val) when Mod =:= dict; Mod =:= orddict -> + Mod:erase(Key, Val); +erase(gb_trees, Key, Val) -> + gb_trees:delete_any(Key, Val). + +take(gb_trees, Key, Val) -> + Res = try + gb_trees:take(Key, Val) + catch + error:_ -> + error + end, + Res = gb_trees:take_any(Key, Val); +take(Mod, Key, Val) -> + Mod:take(Key, Val). |