Packages

fragmentation — encoded possibility space. content-addressed, arbitrary depth, circular-reflexive. reality for git.

Current section

Files

Jump to
fragmentation src fragmentation@store.erl
Raw

src/fragmentation@store.erl

-module(fragmentation@store).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/fragmentation/store.gleam").
-export([new/0, put/2, get/2, has/2, size/1, merge/2, keys/1]).
-export_type([store/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-opaque store() :: {store, gleam@dict:dict(binary(), fragmentation:fragment())}.
-file("src/fragmentation/store.gleam", 22).
?DOC(" Create an empty store.\n").
-spec new() -> store().
new() ->
{store, maps:new()}.
-file("src/fragmentation/store.gleam", 31).
?DOC(" Insert a fragment by its self-ref SHA.\n").
-spec put(store(), fragmentation:fragment()) -> store().
put(Store, Frag) ->
{ref, {sha, Key}, _} = fragmentation:self_ref(Frag),
{store, gleam@dict:insert(erlang:element(2, Store), Key, Frag)}.
-file("src/fragmentation/store.gleam", 38).
?DOC(" Look up a fragment by SHA.\n").
-spec get(store(), fragmentation:sha()) -> {ok, fragmentation:fragment()} |
{error, nil}.
get(Store, S) ->
{sha, Key} = S,
gleam_stdlib:map_get(erlang:element(2, Store), Key).
-file("src/fragmentation/store.gleam", 44).
?DOC(" Check if a fragment exists.\n").
-spec has(store(), fragmentation:sha()) -> boolean().
has(Store, S) ->
{sha, Key} = S,
gleam@dict:has_key(erlang:element(2, Store), Key).
-file("src/fragmentation/store.gleam", 50).
?DOC(" Count fragments in the store.\n").
-spec size(store()) -> integer().
size(Store) ->
maps:size(erlang:element(2, Store)).
-file("src/fragmentation/store.gleam", 55).
?DOC(" Merge two stores. Same SHA = same content.\n").
-spec merge(store(), store()) -> store().
merge(A, B) ->
{store, maps:merge(erlang:element(2, A), erlang:element(2, B))}.
-file("src/fragmentation/store.gleam", 60).
?DOC(" List all SHAs in the store.\n").
-spec keys(store()) -> list(fragmentation:sha()).
keys(Store) ->
_pipe = maps:keys(erlang:element(2, Store)),
gleam@list:map(_pipe, fun(K) -> {sha, K} end).