Current section
Files
Jump to
Current section
Files
src/lww_register.erl
-module(lww_register).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([new/2, set/3, get/1, merge/2]).
-export_type([lww_register/1]).
-type lww_register(FWE) :: {lww_register, FWE, integer(), binary()}.
-file("/Users/louis/src/gleam/lww_register/src/lww_register.gleam", 27).
-spec new(FWF, binary()) -> lww_register(FWF).
new(Value, Id) ->
{lww_register, Value, 0, Id}.
-file("/Users/louis/src/gleam/lww_register/src/lww_register.gleam", 33).
-spec set(lww_register(FWH), FWH, binary()) -> lww_register(FWH).
set(Register, Value, Id) ->
{lww_register, Value, erlang:element(3, Register) + 1, Id}.
-file("/Users/louis/src/gleam/lww_register/src/lww_register.gleam", 43).
-spec get(lww_register(FWK)) -> FWK.
get(Register) ->
erlang:element(2, Register).
-file("/Users/louis/src/gleam/lww_register/src/lww_register.gleam", 55).
-spec merge(lww_register(FWM), lww_register(FWM)) -> lww_register(FWM).
merge(Left, Right) ->
case gleam@int:compare(erlang:element(3, Left), erlang:element(3, Right)) of
gt ->
Left;
lt ->
Right;
eq ->
case gleam@string:compare(
erlang:element(4, Left),
erlang:element(4, Right)
) of
gt ->
Left;
eq ->
Right;
lt ->
Right
end
end.