warning-free vsns of string:str/2 & string:right/3
This commit is contained in:
parent
bfddb53e31
commit
fbe200f1ca
7 changed files with 75 additions and 14 deletions
|
@ -498,10 +498,11 @@ generate_orderedkeys(_Seqn, 0, Acc, _BucketLow, _BucketHigh) ->
|
||||||
Acc;
|
Acc;
|
||||||
generate_orderedkeys(Seqn, Count, Acc, BucketLow, BucketHigh) ->
|
generate_orderedkeys(Seqn, Count, Acc, BucketLow, BucketHigh) ->
|
||||||
BNumber = Seqn div (BucketHigh - BucketLow),
|
BNumber = Seqn div (BucketHigh - BucketLow),
|
||||||
BucketExt = string:right(integer_to_list(BucketLow + BNumber), 4, $0),
|
BucketExt = leveled_util:string_right(
|
||||||
|
integer_to_list(BucketLow + BNumber), 4, $0),
|
||||||
KNumber = Seqn * 100 + leveled_rand:uniform(100),
|
KNumber = Seqn * 100 + leveled_rand:uniform(100),
|
||||||
KeyExt =
|
KeyExt =
|
||||||
string:right(integer_to_list(KNumber), 8, $0),
|
leveled_util:string_right(integer_to_list(KNumber), 8, $0),
|
||||||
LK = leveled_codec:to_ledgerkey("Bucket" ++ BucketExt, "Key" ++ KeyExt, o),
|
LK = leveled_codec:to_ledgerkey("Bucket" ++ BucketExt, "Key" ++ KeyExt, o),
|
||||||
Chunk = leveled_rand:rand_bytes(16),
|
Chunk = leveled_rand:rand_bytes(16),
|
||||||
{_B, _K, MV, _H, _LMs} =
|
{_B, _K, MV, _H, _LMs} =
|
||||||
|
|
|
@ -1386,7 +1386,8 @@ compact_journal_testto(WRP, ExpectedFiles) ->
|
||||||
timer:sleep(1000),
|
timer:sleep(1000),
|
||||||
CompactedManifest2 = ink_getmanifest(Ink1),
|
CompactedManifest2 = ink_getmanifest(Ink1),
|
||||||
lists:foreach(fun({_SQN, FN, _P, _LK}) ->
|
lists:foreach(fun({_SQN, FN, _P, _LK}) ->
|
||||||
?assertMatch(0, string:str(FN, ?COMPACT_FP))
|
?assertMatch(0, leveled_util:string_str(
|
||||||
|
FN, ?COMPACT_FP))
|
||||||
end,
|
end,
|
||||||
CompactedManifest2),
|
CompactedManifest2),
|
||||||
?assertMatch(2, length(CompactedManifest2)),
|
?assertMatch(2, length(CompactedManifest2)),
|
||||||
|
|
|
@ -263,9 +263,11 @@ generate_randomkeys(Count, BucketRangeLow, BucketRangeHigh) ->
|
||||||
generate_randomkeys(0, Acc, _BucketLow, _BucketHigh) ->
|
generate_randomkeys(0, Acc, _BucketLow, _BucketHigh) ->
|
||||||
Acc;
|
Acc;
|
||||||
generate_randomkeys(Count, Acc, BucketLow, BRange) ->
|
generate_randomkeys(Count, Acc, BucketLow, BRange) ->
|
||||||
BNumber = string:right(integer_to_list(BucketLow + leveled_rand:uniform(BRange)),
|
BNumber = leveled_util:string_right(
|
||||||
4, $0),
|
integer_to_list(BucketLow + leveled_rand:uniform(BRange)),
|
||||||
KNumber = string:right(integer_to_list(leveled_rand:uniform(1000)), 4, $0),
|
4, $0),
|
||||||
|
KNumber = leveled_util:string_right(
|
||||||
|
integer_to_list(leveled_rand:uniform(1000)), 4, $0),
|
||||||
K = {o, "Bucket" ++ BNumber, "Key" ++ KNumber, null},
|
K = {o, "Bucket" ++ BNumber, "Key" ++ KNumber, null},
|
||||||
RandKey = {K, {Count + 1,
|
RandKey = {K, {Count + 1,
|
||||||
{active, infinity},
|
{active, infinity},
|
||||||
|
|
|
@ -257,9 +257,11 @@ generate_randomkeys(Seqn, Count, BucketRangeLow, BucketRangeHigh) ->
|
||||||
generate_randomkeys(_Seqn, 0, Acc, _BucketLow, _BucketHigh) ->
|
generate_randomkeys(_Seqn, 0, Acc, _BucketLow, _BucketHigh) ->
|
||||||
Acc;
|
Acc;
|
||||||
generate_randomkeys(Seqn, Count, Acc, BucketLow, BRange) ->
|
generate_randomkeys(Seqn, Count, Acc, BucketLow, BRange) ->
|
||||||
BNumber = string:right(integer_to_list(BucketLow + leveled_rand:uniform(BRange)),
|
BNumber = leveled_util:string_right(
|
||||||
4, $0),
|
integer_to_list(BucketLow + leveled_rand:uniform(BRange)),
|
||||||
KNumber = string:right(integer_to_list(leveled_rand:uniform(1000)), 4, $0),
|
4, $0),
|
||||||
|
KNumber = leveled_util:string_right(
|
||||||
|
integer_to_list(leveled_rand:uniform(1000)), 4, $0),
|
||||||
{K, V} = {{o, "Bucket" ++ BNumber, "Key" ++ KNumber, null},
|
{K, V} = {{o, "Bucket" ++ BNumber, "Key" ++ KNumber, null},
|
||||||
{Seqn, {active, infinity}, null}},
|
{Seqn, {active, infinity}, null}},
|
||||||
generate_randomkeys(Seqn + 1,
|
generate_randomkeys(Seqn + 1,
|
||||||
|
|
|
@ -2487,8 +2487,10 @@ generate_randomkeys(_Seqn, 0, Acc, _BucketLow, _BucketHigh) ->
|
||||||
Acc;
|
Acc;
|
||||||
generate_randomkeys(Seqn, Count, Acc, BucketLow, BRange) ->
|
generate_randomkeys(Seqn, Count, Acc, BucketLow, BRange) ->
|
||||||
BRand = leveled_rand:uniform(BRange),
|
BRand = leveled_rand:uniform(BRange),
|
||||||
BNumber = string:right(integer_to_list(BucketLow + BRand), 4, $0),
|
BNumber = leveled_util:string_right(
|
||||||
KNumber = string:right(integer_to_list(leveled_rand:uniform(1000)), 6, $0),
|
integer_to_list(BucketLow + BRand), 4, $0),
|
||||||
|
KNumber = leveled_util:string_right(
|
||||||
|
integer_to_list(leveled_rand:uniform(1000)), 6, $0),
|
||||||
LK = leveled_codec:to_ledgerkey("Bucket" ++ BNumber, "Key" ++ KNumber, o),
|
LK = leveled_codec:to_ledgerkey("Bucket" ++ BNumber, "Key" ++ KNumber, o),
|
||||||
Chunk = leveled_rand:rand_bytes(64),
|
Chunk = leveled_rand:rand_bytes(64),
|
||||||
{_B, _K, MV, _H, _LMs} =
|
{_B, _K, MV, _H, _LMs} =
|
||||||
|
|
|
@ -581,8 +581,10 @@ generate_randomkeys(_Seqn, 0, Acc, _BucketLow, _BucketHigh) ->
|
||||||
Acc;
|
Acc;
|
||||||
generate_randomkeys(Seqn, Count, Acc, BucketLow, BRange) ->
|
generate_randomkeys(Seqn, Count, Acc, BucketLow, BRange) ->
|
||||||
BRand = leveled_rand:uniform(BRange),
|
BRand = leveled_rand:uniform(BRange),
|
||||||
BNumber = string:right(integer_to_list(BucketLow + BRand), 4, $0),
|
BNumber = leveled_util:string_right(
|
||||||
KNumber = string:right(integer_to_list(leveled_rand:uniform(1000)), 4, $0),
|
integer_to_list(BucketLow + BRand), 4, $0),
|
||||||
|
KNumber = leveled_util:string_right(
|
||||||
|
integer_to_list(leveled_rand:uniform(1000)), 4, $0),
|
||||||
{K, V} = {{o, "Bucket" ++ BNumber, "Key" ++ KNumber, null},
|
{K, V} = {{o, "Bucket" ++ BNumber, "Key" ++ KNumber, null},
|
||||||
{Seqn, {active, infinity}, null}},
|
{Seqn, {active, infinity}, null}},
|
||||||
generate_randomkeys(Seqn + 1,
|
generate_randomkeys(Seqn + 1,
|
||||||
|
|
|
@ -16,6 +16,18 @@
|
||||||
integer_time/1,
|
integer_time/1,
|
||||||
magic_hash/1]).
|
magic_hash/1]).
|
||||||
|
|
||||||
|
-export([string_right/3,
|
||||||
|
string_str/2]).
|
||||||
|
|
||||||
|
-ifdef(OTP_RELEASE).
|
||||||
|
|
||||||
|
-if(?OTP_RELEASE >= 21).
|
||||||
|
-else.
|
||||||
|
-define(LEGACY_OTP, true).
|
||||||
|
-endif.
|
||||||
|
|
||||||
|
-endif. % (OTP_RELEASE)
|
||||||
|
|
||||||
|
|
||||||
-spec generate_uuid() -> list().
|
-spec generate_uuid() -> list().
|
||||||
%% @doc
|
%% @doc
|
||||||
|
@ -64,8 +76,47 @@ hash1(H, <<B:8/integer, Rest/bytes>>) ->
|
||||||
H2 = H1 bxor B,
|
H2 = H1 bxor B,
|
||||||
hash1(H2, Rest).
|
hash1(H2, Rest).
|
||||||
|
|
||||||
|
%% A number of string functions have become deprecated in OTP 21
|
||||||
|
%%
|
||||||
|
-ifdef(LEGACY_OTP).
|
||||||
|
|
||||||
|
string_right(String, Len, Char) ->
|
||||||
|
string:right(String, Len, Char).
|
||||||
|
|
||||||
|
string_str(S, Sub) ->
|
||||||
|
string:str(S, Sub).
|
||||||
|
|
||||||
|
-else.
|
||||||
|
|
||||||
|
string_right(String, Len, Char) when is_list(String), is_integer(Char) ->
|
||||||
|
Slen = length(String),
|
||||||
|
if
|
||||||
|
Slen > Len -> lists:nthtail(Slen-Len, String);
|
||||||
|
Slen < Len -> chars(Char, Len-Slen, String);
|
||||||
|
Slen =:= Len -> String
|
||||||
|
end.
|
||||||
|
|
||||||
|
chars(C, N, Tail) when N > 0 ->
|
||||||
|
chars(C, N-1, [C|Tail]);
|
||||||
|
chars(C, 0, Tail) when is_integer(C) ->
|
||||||
|
Tail.
|
||||||
|
|
||||||
|
|
||||||
|
string_str(S, Sub) when is_list(Sub) -> str(S, Sub, 1).
|
||||||
|
|
||||||
|
str([C|S], [C|Sub], I) ->
|
||||||
|
case l_prefix(Sub, S) of
|
||||||
|
true -> I;
|
||||||
|
false -> str(S, [C|Sub], I+1)
|
||||||
|
end;
|
||||||
|
str([_|S], Sub, I) -> str(S, Sub, I+1);
|
||||||
|
str([], _Sub, _I) -> 0.
|
||||||
|
|
||||||
|
l_prefix([C|Pre], [C|String]) -> l_prefix(Pre, String);
|
||||||
|
l_prefix([], String) when is_list(String) -> true;
|
||||||
|
l_prefix(Pre, String) when is_list(Pre), is_list(String) -> false.
|
||||||
|
|
||||||
|
-endif.
|
||||||
|
|
||||||
%%%============================================================================
|
%%%============================================================================
|
||||||
%%% Test
|
%%% Test
|
||||||
|
@ -88,4 +139,4 @@ magichashperf_test() ->
|
||||||
{TimeMH2, _HL1} = timer:tc(lists, map, [fun(K) -> magic_hash(K) end, KL]),
|
{TimeMH2, _HL1} = timer:tc(lists, map, [fun(K) -> magic_hash(K) end, KL]),
|
||||||
io:format(user, "1000 keys magic hashed in ~w microseconds~n", [TimeMH2]).
|
io:format(user, "1000 keys magic hashed in ~w microseconds~n", [TimeMH2]).
|
||||||
|
|
||||||
-endif.
|
-endif.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue