From 94d714bb2f9bcb8a4ff52c0970aef623ccbfa96b Mon Sep 17 00:00:00 2001 From: Joseph Wilk Date: Sat, 15 Jun 2013 20:27:15 +0200 Subject: [PATCH] new was wasteful, just create the new ordered bucket. --- lib/elixir/lib/set.ex | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/elixir/lib/set.ex b/lib/elixir/lib/set.ex index 1d9df21f20..9572e55f61 100644 --- a/lib/elixir/lib/set.ex +++ b/lib/elixir/lib/set.ex @@ -156,7 +156,8 @@ defmodule Set do ## Set-wide functions defp set_intersect(ordered(bucket: bucket1), ordered(bucket: bucket2)) do - new(bucket_intersect(bucket1, bucket2)) + { new_bucket, size } = bucket_intersect(bucket1, bucket2) + ordered(bucket: new_bucket, size: size) end defp set_intersect(trie(size: size1) = set1, trie(size: size2) = set2) when size1 > size2 do @@ -258,23 +259,26 @@ defmodule Set do ## Bucket helpers defp bucket_intersect([m | bucket1], [m | bucket2]) do - [m | bucket_intersect(bucket1, bucket2)] + { new, count } = bucket_intersect(bucket1, bucket2) + { [m | new], count + 1 } end defp bucket_intersect([m1 | _] = bucket1, [m2 | bucket2]) when m1 > m2 do - bucket_intersect(bucket1, bucket2) + { new, count } = bucket_intersect(bucket1, bucket2) + { new, count } end defp bucket_intersect([_ | bucket1], bucket2) do - bucket_intersect(bucket1, bucket2) + { new, count } = bucket_intersect(bucket1, bucket2) + { new, count } end defp bucket_intersect([], _) do - [] + { [], 0 } end defp bucket_intersect(_, []) do - [] + { [], 0 } end defp bucket_difference([m | bucket1], [m | bucket2]) do