Packages

An embedded, crash-safe key-value store for Gleam, inspired by CubDB

Current section

Files

Jump to
trove src trove@internal@snapshot.erl
Raw

src/trove@internal@snapshot.erl

-module(trove@internal@snapshot).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/trove/internal/snapshot.gleam").
-export([new/5, close/1, get/2, range/4]).
-export_type([snapshot/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-opaque snapshot(JRB, JRC) :: {snapshot,
trove@internal@btree:btree(JRB, JRC),
trove@internal@store:store(),
trove@codec:codec(JRB),
trove@codec:codec(JRC),
fun((JRB, JRB) -> gleam@order:order())}.
-file("src/trove/internal/snapshot.gleam", 26).
?DOC(false).
-spec new(
trove@internal@btree:btree(JRD, JRE),
trove@internal@store:store(),
trove@codec:codec(JRD),
trove@codec:codec(JRE),
fun((JRD, JRD) -> gleam@order:order())
) -> snapshot(JRD, JRE).
new(Tree, Store, Key_codec, Value_codec, Key_compare) ->
{snapshot, Tree, Store, Key_codec, Value_codec, Key_compare}.
-file("src/trove/internal/snapshot.gleam", 37).
?DOC(false).
-spec close(snapshot(any(), any())) -> nil.
close(Snapshot) ->
case trove@internal@store:close(erlang:element(3, Snapshot)) of
{ok, nil} ->
nil;
{error, Reason} ->
gleam_stdlib:println_error(
<<"[trove] failed to close snapshot store: "/utf8,
(trove@internal@store:error_to_string(Reason))/binary>>
)
end.
-file("src/trove/internal/snapshot.gleam", 49).
?DOC(false).
-spec get(snapshot(JRP, JRQ), JRP) -> gleam@option:option(JRQ).
get(Snapshot, Key) ->
Result@1 = case trove@internal@btree:lookup(
erlang:element(2, Snapshot),
erlang:element(3, Snapshot),
Key,
erlang:element(4, Snapshot),
erlang:element(5, Snapshot),
erlang:element(6, Snapshot)
) of
{ok, Result} -> Result;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"trove/internal/snapshot"/utf8>>,
function => <<"get"/utf8>>,
line => 50,
value => _assert_fail,
start => 1453,
'end' => 1687,
pattern_start => 1464,
pattern_end => 1474})
end,
Result@1.
-file("src/trove/internal/snapshot.gleam", 63).
?DOC(false).
-spec range(
snapshot(JRU, JRV),
gleam@option:option(trove@range:bound(JRU)),
gleam@option:option(trove@range:bound(JRU)),
trove@range:direction()
) -> gleam@yielder:yielder({JRU, JRV}).
range(Snapshot, Min, Max, Direction) ->
trove@internal@btree@range:'query'(
erlang:element(2, Snapshot),
erlang:element(3, Snapshot),
Min,
Max,
Direction,
erlang:element(4, Snapshot),
erlang:element(5, Snapshot),
erlang:element(6, Snapshot)
).