In hyper_binary, merge the buffers to allow for more efficient merges of small into big filters.
diff --git a/src/hyper.erl b/src/hyper.erl
index a0bb82f..992da1f 100644
--- a/src/hyper.erl
+++ b/src/hyper.erl
@@ -300,7 +300,7 @@
[generate_unique(Card), new(P, Mod)]),
ReusableH = compact(insert_many(generate_unique(Card), new(P, Mod))),
- UnionUs = Time(fun union/2,
+ UnionUs = Time(fun (L, R) -> compact(union(L, R)) end,
[insert_many(generate_unique(Card div 10), new(P, Mod)),
ReusableH]),
diff --git a/src/hyper_binary.erl b/src/hyper_binary.erl
index 6a57e67..a898384 100644
--- a/src/hyper_binary.erl
+++ b/src/hyper_binary.erl
@@ -89,16 +89,18 @@
Merged = do_merge(SmallB, BigB, <<>>),
Big#dense{b = Merged};
-max_merge(#buffer{buf = Buf}, #dense{b = B} = Dense) ->
- Merged = merge_buf(B, max_registers(Buf)),
- Dense#dense{b = Merged};
+max_merge(#buffer{buf = Buf}, #dense{buf = DenseBuf} = Dense) ->
+ Merged = max_registers(DenseBuf ++ Buf),
+ Dense#dense{buf = Merged,
+ buf_size = length(Merged)};
-max_merge(#dense{b = B} = Dense, #buffer{buf = Buf}) ->
- Merged = merge_buf(B, max_registers(Buf)),
- Dense#dense{b = Merged};
+max_merge(#dense{} = Dense, #buffer{} = Buffer) ->
+ max_merge(Buffer, Dense);
max_merge(#buffer{buf = LeftBuf}, #buffer{buf = RightBuf} = Right) ->
- Right#buffer{buf = max_registers(LeftBuf ++ RightBuf)}.
+ Merged = max_registers(LeftBuf ++ RightBuf),
+ Right#buffer{buf = Merged,
+ buf_size = length(Merged)}.