_site/cover/scran_bits.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 %% @doc Parser combinators that deal with bit inputs
17
18 -module(scran_bits).
19
20
21 -export([into_boolean/0]).
22 -export([tag/1]).
23 -export([take/1]).
24 -include_lib("kernel/include/logger.hrl").
25
26
27 %% @doc Takes 1 bit from the input converting it into a boolean.
28 %% @returns A tuple of the remaining input and a boolean result.
29
30 -spec into_boolean() -> scran:parser(<<_:_*1>>, boolean()).
31
32 into_boolean() ->
33 11 fun
34 (<<0:1, Remaining/bits>>) ->
35 40 {Remaining, false};
36
37 (<<1:1, Remaining/bits>>) ->
38 18 {Remaining, true};
39
40 (_) ->
41 7 nomatch
42 end.
43
44
45 %% @doc Return the matching input.
46
47 -spec tag(bitstring()) -> scran:parser(<<_:_*1>>, <<_:_*1>>).
48
49 tag(Tag) ->
50
:-(
fun
51 (<<Matched:(bit_size(Tag))/bits, Remaining/bits>>)
52 when Tag == Matched ->
53
:-(
{Remaining, Tag};
54
55 (_) ->
56
:-(
nomatch
57 end.
58
59
60 take(N) when is_integer(N), N >= 0 ->
61
:-(
?LOG_DEBUG(#{n => N}),
62
:-(
fun
63 (<<Taken:N/bits, Remaining/bits>>) ->
64
:-(
?LOG_DEBUG(#{n => N,
65 taken => Taken,
66
:-(
remaining => Remaining}),
67
68
:-(
{Remaining, Taken};
69
70 (Otherwise) ->
71
:-(
?LOG_DEBUG(#{nomatch => Otherwise, n => N}),
72
:-(
nomatch
73 end.
Line Hits Source