From fbe200f1ca5b020f58354beb4dcece329c15b25f Mon Sep 17 00:00:00 2001 From: Ulf Wiger Date: Fri, 7 Dec 2018 08:39:44 +0100 Subject: [PATCH] warning-free vsns of string:str/2 & string:right/3 --- src/leveled_ebloom.erl | 5 ++-- src/leveled_inker.erl | 3 ++- src/leveled_pclerk.erl | 8 ++++--- src/leveled_pmem.erl | 8 ++++--- src/leveled_sst.erl | 6 +++-- src/leveled_tree.erl | 6 +++-- src/leveled_util.erl | 53 +++++++++++++++++++++++++++++++++++++++++- 7 files changed, 75 insertions(+), 14 deletions(-) diff --git a/src/leveled_ebloom.erl b/src/leveled_ebloom.erl index 91d8879..f2ab67e 100644 --- a/src/leveled_ebloom.erl +++ b/src/leveled_ebloom.erl @@ -498,10 +498,11 @@ generate_orderedkeys(_Seqn, 0, Acc, _BucketLow, _BucketHigh) -> Acc; generate_orderedkeys(Seqn, Count, Acc, BucketLow, BucketHigh) -> 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), 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), Chunk = leveled_rand:rand_bytes(16), {_B, _K, MV, _H, _LMs} = diff --git a/src/leveled_inker.erl b/src/leveled_inker.erl index 4b693c9..42d48cd 100644 --- a/src/leveled_inker.erl +++ b/src/leveled_inker.erl @@ -1386,7 +1386,8 @@ compact_journal_testto(WRP, ExpectedFiles) -> timer:sleep(1000), CompactedManifest2 = ink_getmanifest(Ink1), lists:foreach(fun({_SQN, FN, _P, _LK}) -> - ?assertMatch(0, string:str(FN, ?COMPACT_FP)) + ?assertMatch(0, leveled_util:string_str( + FN, ?COMPACT_FP)) end, CompactedManifest2), ?assertMatch(2, length(CompactedManifest2)), diff --git a/src/leveled_pclerk.erl b/src/leveled_pclerk.erl index 8f9e3b2..93d295d 100644 --- a/src/leveled_pclerk.erl +++ b/src/leveled_pclerk.erl @@ -263,9 +263,11 @@ generate_randomkeys(Count, BucketRangeLow, BucketRangeHigh) -> generate_randomkeys(0, Acc, _BucketLow, _BucketHigh) -> Acc; generate_randomkeys(Count, Acc, BucketLow, BRange) -> - BNumber = string:right(integer_to_list(BucketLow + leveled_rand:uniform(BRange)), - 4, $0), - KNumber = string:right(integer_to_list(leveled_rand:uniform(1000)), 4, $0), + BNumber = leveled_util:string_right( + integer_to_list(BucketLow + leveled_rand:uniform(BRange)), + 4, $0), + KNumber = leveled_util:string_right( + integer_to_list(leveled_rand:uniform(1000)), 4, $0), K = {o, "Bucket" ++ BNumber, "Key" ++ KNumber, null}, RandKey = {K, {Count + 1, {active, infinity}, diff --git a/src/leveled_pmem.erl b/src/leveled_pmem.erl index 171021f..f28f416 100644 --- a/src/leveled_pmem.erl +++ b/src/leveled_pmem.erl @@ -257,9 +257,11 @@ generate_randomkeys(Seqn, Count, BucketRangeLow, BucketRangeHigh) -> generate_randomkeys(_Seqn, 0, Acc, _BucketLow, _BucketHigh) -> Acc; generate_randomkeys(Seqn, Count, Acc, BucketLow, BRange) -> - BNumber = string:right(integer_to_list(BucketLow + leveled_rand:uniform(BRange)), - 4, $0), - KNumber = string:right(integer_to_list(leveled_rand:uniform(1000)), 4, $0), + BNumber = leveled_util:string_right( + integer_to_list(BucketLow + leveled_rand:uniform(BRange)), + 4, $0), + KNumber = leveled_util:string_right( + integer_to_list(leveled_rand:uniform(1000)), 4, $0), {K, V} = {{o, "Bucket" ++ BNumber, "Key" ++ KNumber, null}, {Seqn, {active, infinity}, null}}, generate_randomkeys(Seqn + 1, diff --git a/src/leveled_sst.erl b/src/leveled_sst.erl index e2f226b..263530f 100644 --- a/src/leveled_sst.erl +++ b/src/leveled_sst.erl @@ -2487,8 +2487,10 @@ generate_randomkeys(_Seqn, 0, Acc, _BucketLow, _BucketHigh) -> Acc; generate_randomkeys(Seqn, Count, Acc, BucketLow, BRange) -> BRand = leveled_rand:uniform(BRange), - BNumber = string:right(integer_to_list(BucketLow + BRand), 4, $0), - KNumber = string:right(integer_to_list(leveled_rand:uniform(1000)), 6, $0), + BNumber = leveled_util:string_right( + 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), Chunk = leveled_rand:rand_bytes(64), {_B, _K, MV, _H, _LMs} = diff --git a/src/leveled_tree.erl b/src/leveled_tree.erl index f033bb4..4f532ad 100644 --- a/src/leveled_tree.erl +++ b/src/leveled_tree.erl @@ -581,8 +581,10 @@ generate_randomkeys(_Seqn, 0, Acc, _BucketLow, _BucketHigh) -> Acc; generate_randomkeys(Seqn, Count, Acc, BucketLow, BRange) -> BRand = leveled_rand:uniform(BRange), - BNumber = string:right(integer_to_list(BucketLow + BRand), 4, $0), - KNumber = string:right(integer_to_list(leveled_rand:uniform(1000)), 4, $0), + BNumber = leveled_util:string_right( + 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}, {Seqn, {active, infinity}, null}}, generate_randomkeys(Seqn + 1, diff --git a/src/leveled_util.erl b/src/leveled_util.erl index 0539a22..6cb1990 100644 --- a/src/leveled_util.erl +++ b/src/leveled_util.erl @@ -16,6 +16,18 @@ integer_time/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(). %% @doc @@ -64,8 +76,47 @@ hash1(H, <>) -> H2 = H1 bxor B, 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 @@ -88,4 +139,4 @@ magichashperf_test() -> {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]). --endif. \ No newline at end of file +-endif.