_site/cover/pgmp_lsn.COVER.html

1 %% Copyright (c) 2023 Peter Morgan <peter.james.morgan@gmail.com>
2 %%
3 %% Licensed under the Apache License, Version 2.0 (the "License");
4 %% you may not use this file except in compliance with the License.
5 %% You may obtain a copy of the License at
6 %%
7 %% http://www.apache.org/licenses/LICENSE-2.0
8 %%
9 %% Unless required by applicable law or agreed to in writing, software
10 %% distributed under the License is distributed on an "AS IS" BASIS,
11 %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 %% See the License for the specific language governing permissions and
13 %% limitations under the License.
14
15
16 -module(pgmp_lsn).
17
18
19 -export([decode/1]).
20 -export([encode/1]).
21
22
23 decode(LSN) when is_binary(LSN) ->
24 1 case string:split(LSN, "/", all) of
25 [Upper, Lower] ->
26 1 decode(binary_to_integer(Upper, 16),
27 binary_to_integer(Lower, 16));
28 _ ->
29
:-(
error(badarg, [LSN])
30 end.
31
32 decode(Upper, Lower) ->
33 1 (Upper bsl 32) + Lower.
34
35
36 encode(LSN) when is_integer(LSN) ->
37 6 <<Upper:32, Lower:32>> = <<LSN:64>>,
38 6 iolist_to_binary(
39 io_lib:format("~.16B/~.16B", [Upper, Lower])).
Line Hits Source