Pārlūkot izejas kodu

refactor(ds): Introduce bitwise_concat function

ieQu1 3 gadi atpakaļ
vecāks
revīzija
0bbc5ecb32
1 mainītis faili ar 17 papildinājumiem un 12 dzēšanām
  1. 17 12
      apps/emqx_replay/src/emqx_replay_message_storage.erl

+ 17 - 12
apps/emqx_replay/src/emqx_replay_message_storage.erl

@@ -106,6 +106,8 @@
 
 
 -export_type([db/0, iterator/0]).
 -export_type([db/0, iterator/0]).
 
 
+-compile({inline, [ones/1, bitwise_concat/3]}).
+
 %%================================================================================
 %%================================================================================
 %% Type declarations
 %% Type declarations
 %%================================================================================
 %%================================================================================
@@ -343,41 +345,44 @@ hash(Input, Bits) ->
 
 
 compute_bitstring(Topic, Timestamp, [{timestamp, Offset, Size} | Rest], Acc) ->
 compute_bitstring(Topic, Timestamp, [{timestamp, Offset, Size} | Rest], Acc) ->
     I = (Timestamp bsr Offset) band ones(Size),
     I = (Timestamp bsr Offset) band ones(Size),
-    compute_bitstring(Topic, Timestamp, Rest, (Acc bsl Size) + I);
+    compute_bitstring(Topic, Timestamp, Rest, bitwise_concat(Acc, I, Size));
 compute_bitstring([], Timestamp, [{hash, level, Size} | Rest], Acc) ->
 compute_bitstring([], Timestamp, [{hash, level, Size} | Rest], Acc) ->
     I = hash(<<"/">>, Size),
     I = hash(<<"/">>, Size),
-    compute_bitstring([], Timestamp, Rest, (Acc bsl Size) + I);
+    compute_bitstring([], Timestamp, Rest, bitwise_concat(Acc, I, Size));
 compute_bitstring([Level | Tail], Timestamp, [{hash, level, Size} | Rest], Acc) ->
 compute_bitstring([Level | Tail], Timestamp, [{hash, level, Size} | Rest], Acc) ->
     I = hash(Level, Size),
     I = hash(Level, Size),
-    compute_bitstring(Tail, Timestamp, Rest, (Acc bsl Size) + I);
+    compute_bitstring(Tail, Timestamp, Rest, bitwise_concat(Acc, I, Size));
 compute_bitstring(Tail, Timestamp, [{hash, levels, Size} | Rest], Acc) ->
 compute_bitstring(Tail, Timestamp, [{hash, levels, Size} | Rest], Acc) ->
     I = hash(Tail, Size),
     I = hash(Tail, Size),
-    compute_bitstring(Tail, Timestamp, Rest, (Acc bsl Size) + I);
+    compute_bitstring(Tail, Timestamp, Rest, bitwise_concat(Acc, I, Size));
 compute_bitstring(_, _, [], Acc) ->
 compute_bitstring(_, _, [], Acc) ->
     Acc.
     Acc.
 
 
 compute_hash_bitmask(Filter, [{timestamp, _, Size} | Rest], Acc) ->
 compute_hash_bitmask(Filter, [{timestamp, _, Size} | Rest], Acc) ->
-    compute_hash_bitmask(Filter, Rest, (Acc bsl Size) + 0);
+    compute_hash_bitmask(Filter, Rest, bitwise_concat(Acc, 0, Size));
 compute_hash_bitmask(['#'], [{hash, _, Size} | Rest], Acc) ->
 compute_hash_bitmask(['#'], [{hash, _, Size} | Rest], Acc) ->
-    compute_hash_bitmask(['#'], Rest, (Acc bsl Size) + 0);
+    compute_hash_bitmask(['#'], Rest, bitwise_concat(Acc, 0, Size));
 compute_hash_bitmask(['+' | Tail], [{hash, _, Size} | Rest], Acc) ->
 compute_hash_bitmask(['+' | Tail], [{hash, _, Size} | Rest], Acc) ->
-    compute_hash_bitmask(Tail, Rest, (Acc bsl Size) + 0);
+    compute_hash_bitmask(Tail, Rest, bitwise_concat(Acc, 0, Size));
 compute_hash_bitmask([], [{hash, level, Size} | Rest], Acc) ->
 compute_hash_bitmask([], [{hash, level, Size} | Rest], Acc) ->
-    compute_hash_bitmask([], Rest, (Acc bsl Size) + ones(Size));
+    compute_hash_bitmask([], Rest, bitwise_concat(Acc, ones(Size), Size));
 compute_hash_bitmask([_ | Tail], [{hash, level, Size} | Rest], Acc) ->
 compute_hash_bitmask([_ | Tail], [{hash, level, Size} | Rest], Acc) ->
-    compute_hash_bitmask(Tail, Rest, (Acc bsl Size) + ones(Size));
+    compute_hash_bitmask(Tail, Rest, bitwise_concat(Acc, ones(Size), Size));
 compute_hash_bitmask(_, [{hash, levels, Size} | Rest], Acc) ->
 compute_hash_bitmask(_, [{hash, levels, Size} | Rest], Acc) ->
-    compute_hash_bitmask([], Rest, (Acc bsl Size) + ones(Size));
+    compute_hash_bitmask([], Rest, bitwise_concat(Acc, ones(Size), Size));
 compute_hash_bitmask(_, [], Acc) ->
 compute_hash_bitmask(_, [], Acc) ->
     Acc.
     Acc.
 
 
 compute_time_bitmask([{timestamp, _, Size} | Rest], Acc) ->
 compute_time_bitmask([{timestamp, _, Size} | Rest], Acc) ->
-    compute_time_bitmask(Rest, (Acc bsl Size) + ones(Size));
+    compute_time_bitmask(Rest, bitwise_concat(Acc, ones(Size), Size));
 compute_time_bitmask([{hash, _, Size} | Rest], Acc) ->
 compute_time_bitmask([{hash, _, Size} | Rest], Acc) ->
-    compute_time_bitmask(Rest, (Acc bsl Size) + 0);
+    compute_time_bitmask(Rest, bitwise_concat(Acc, 0, Size));
 compute_time_bitmask([], Acc) ->
 compute_time_bitmask([], Acc) ->
     Acc.
     Acc.
 
 
+bitwise_concat(Acc, Item, ItemSize) ->
+    (Acc bsl ItemSize) bor Item.
+
 ones(Bits) ->
 ones(Bits) ->
     1 bsl Bits - 1.
     1 bsl Bits - 1.