Packages
mist
0.17.0
6.0.3
6.0.2
6.0.1
6.0.0
5.0.4
5.0.3
5.0.2
5.0.1
5.0.0
5.0.0-rc1
4.0.7
4.0.6
4.0.5
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.0.0
1.2.0
1.1.0
1.0.0
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.17.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
a misty Gleam web server
Current section
Files
Jump to
Current section
Files
src/mist@internal@buffer.erl
-module(mist@internal@buffer).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([empty/0, new/1, append/2, slice/2, with_capacity/2, size/1]).
-export_type([buffer/0]).
-type buffer() :: {buffer, integer(), bitstring()}.
-spec empty() -> buffer().
empty() ->
{buffer, 0, <<>>}.
-spec new(bitstring()) -> buffer().
new(Data) ->
{buffer, 0, Data}.
-spec append(buffer(), bitstring()) -> buffer().
append(Buffer, Data) ->
erlang:setelement(
3,
Buffer,
<<(erlang:element(3, Buffer))/bitstring, Data/bitstring>>
).
-spec slice(buffer(), integer()) -> {bitstring(), bitstring()}.
slice(Buffer, Bits) ->
Bytes = Bits * 8,
case erlang:element(3, Buffer) of
<<Value:Bytes/bitstring, Rest/bitstring>> ->
{Value, Rest};
_ ->
{erlang:element(3, Buffer), <<>>}
end.
-spec with_capacity(buffer(), integer()) -> buffer().
with_capacity(Buffer, Size) ->
erlang:setelement(2, Buffer, Size).
-spec size(integer()) -> buffer().
size(Remaining) ->
{buffer, Remaining, <<>>}.