Packages
altworx_runbox
24.0.0
25.0.0
24.0.0
23.1.0
23.0.0
22.2.0
22.1.0
22.0.0
21.2.0
21.1.2
21.1.1
21.1.0
21.0.0
20.0.0
19.0.0
18.0.0
17.2.0
17.1.0
17.0.1
17.0.0
16.2.0
16.1.0
16.0.0
15.0.0
14.1.0
14.0.1
14.0.0
13.0.3
13.0.2
13.0.1
13.0.0
12.1.0
12.0.0
11.0.1
11.0.0
10.0.0
9.0.0
8.0.0
7.0.1
7.0.0
6.0.0
5.0.0
4.0.0
3.0.0
2.1.0
2.0.0
1.4.1
1.4.0
1.3.0
1.2.0
1.1.0
1.0.0
0.1.3
0.1.2
0.1.1
0.1.0
Runbox is a library for running Altworx scenarios.
Current section
Files
Jump to
Current section
Files
lib/runbox/runtime/stage/unit_registry/alternative_registry.ex
defmodule Runbox.Runtime.Stage.UnitRegistry.AlternativeRegistry do
@moduledoc group: :internal
@moduledoc """
Module manages alternative registry state.
Every unit is registered only once per alternative registry. More than one unit can be registered
with the same key.
"""
@doc "Returns new alternative registry"
def new do
%{}
end
@type registration_key :: term
@type unit_id :: term
@type t :: %{registration_key => [unit_id]}
@doc "Registers unit in alternative reg with given key"
@spec register_unit(t, registration_key, unit_id) :: t
def register_unit(alt_reg, key, unit_id) do
registered_units = Map.get(alt_reg, key, [])
if unit_id in registered_units do
alt_reg
else
Map.put(alt_reg, key, Enum.concat(registered_units, [unit_id]))
end
end
@doc "Unregisters unit from alternative reg"
@spec unregister_unit(t, unit_id) :: t
def unregister_unit(alt_reg, unit_id) do
Enum.reduce(alt_reg, %{}, fn {key, units0}, acc ->
case List.delete(units0, unit_id) do
[] ->
acc
units ->
Map.put(acc, key, units)
end
end)
end
@doc "Get registered unit ids"
@spec lookup(t, registration_key) :: [unit_id]
def lookup(alt_reg, key) do
Map.get(alt_reg, key, [])
end
end