File 2589-Optimize-ordsets-union-1.patch of Package erlang
From 3a7c035afbb3ec50c4dfab1b29516e5b54c0cbcc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Thu, 27 Jun 2019 13:15:26 +0200
Subject: [PATCH] Optimize ordsets:union/1
`ordsets:union/1` is not especially efficient when calculating the
union of many ordsets. Rewrite it to use the highly optimized
`lists:umerge/1`.
---
lib/stdlib/src/ordsets.erl | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/lib/stdlib/src/ordsets.erl b/lib/stdlib/src/ordsets.erl
index 176047079b..95b83ded8c 100644
--- a/lib/stdlib/src/ordsets.erl
+++ b/lib/stdlib/src/ordsets.erl
@@ -150,13 +150,8 @@ union(Es1, []) -> Es1.
OrdsetList :: [ordset(T)],
Ordset :: ordset(T).
-union([S1,S2|Ss]) ->
- union1(union(S1, S2), Ss);
-union([S]) -> S;
-union([]) -> [].
-
-union1(S1, [S2|Ss]) -> union1(union(S1, S2), Ss);
-union1(S1, []) -> S1.
+union(OrdsetList) ->
+ lists:umerge(OrdsetList).
%% intersection(OrdSet1, OrdSet2) -> OrdSet.
%% Return the intersection of OrdSet1 and OrdSet2.
--
2.16.4