From 96d251ec3cb224e8e0712fb0083987e38f039d78 Mon Sep 17 00:00:00 2001 From: Gilbert Wong Date: Tue, 7 Aug 2018 10:27:04 +0800 Subject: [PATCH] Add encode and decode options and test suites --- src/emqx_base62.erl | 24 ++++++++++++++++++------ src/emqx_guid.erl | 4 ++-- test/emqx_base62_SUITE.erl | 7 +++++-- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/emqx_base62.erl b/src/emqx_base62.erl index 0649900c2..690115ec2 100644 --- a/src/emqx_base62.erl +++ b/src/emqx_base62.erl @@ -14,8 +14,10 @@ -module(emqx_base62). --export([encode/1, decode/1]). - +-export([encode/1, + encode/2, + decode/1, + decode/2]). %% @doc Encode any data to base62 binary -spec encode(string() @@ -28,18 +30,23 @@ encode(S) when is_list(S)-> encode(B) when is_binary(B) -> encode(B, <<>>). +%% encode(D, string) -> +%% binary_to_list(encode(D)). + %% @doc Decode base62 binary to origin data binary decode(L) when is_list(L) -> decode(list_to_binary(L)); decode(B) when is_binary(B) -> decode(B, <<>>). -%% encode_base62(<>, Acc) -> -%% encode_byte_group(H, Acc); -%% encode_base62(<>, Acc) -> -%% encode_byte_group(H, Acc); +%%==================================================================== +%% Internal functions +%%==================================================================== + +encode(D, string) -> + binary_to_list(encode(D)); encode(<>, Acc) -> CharList = [encode_char(Index1), encode_char(Index2), encode_char(Index3), encode_char(Index4)], NewAcc = <>, @@ -55,6 +62,10 @@ encode(<>, Acc) -> encode(<<>>, Acc) -> Acc. +decode(D, integer) -> + binary_to_integer(decode(D)); +decode(D, string) -> + binary_to_list(decode(D)); decode(<>, Acc) when bit_size(Rest) >= 8-> case Head == $9 of @@ -99,3 +110,4 @@ decode_char(I) when I >= $A andalso I =< $Z-> decode_char(9, I) -> I + 61 - $A. + diff --git a/src/emqx_guid.erl b/src/emqx_guid.erl index 8fe0c7b6e..fa9139ebd 100644 --- a/src/emqx_guid.erl +++ b/src/emqx_guid.erl @@ -126,9 +126,9 @@ from_hexstr(S) -> I = list_to_integer(binary_to_list(S), 16), <>. to_base62(<>) -> - binary_to_list(emqx_base62:encode(I)). + emqx_base62:encode(I). from_base62(S) -> - I = binary_to_integer(emqx_base62:decode(S)), + I = emqx_base62:decode(S, integer), <>. diff --git a/test/emqx_base62_SUITE.erl b/test/emqx_base62_SUITE.erl index cf4bc9756..820c7ec32 100644 --- a/test/emqx_base62_SUITE.erl +++ b/test/emqx_base62_SUITE.erl @@ -32,5 +32,8 @@ t_base62_encode(_) -> <<"65535">> = ?BASE62:decode(?BASE62:encode(<<"65535">>)), <> = emqx_guid:gen(), <> = emqx_guid:gen(), - X = erlang:binary_to_integer(?BASE62:decode(?BASE62:encode(X))), - Y = erlang:binary_to_integer(?BASE62:decode(?BASE62:encode(Y))). + X = ?BASE62:decode(?BASE62:encode(X), integer), + Y = ?BASE62:decode(?BASE62:encode(Y), integer), + <<"helloworld">> = ?BASE62:decode(?BASE62:encode("helloworld")), + "helloworld" = ?BASE62:decode(?BASE62:encode("helloworld", string), string). +