Packages

A library for distributed reactive programming with flexible consistency guarantees drawing from QUARP and Rx.. Features the familiar behaviours and event streams in the spirit of FRP.

Current section

Files

Jump to
bquarp lib reactivity quality guarantee.ex
Raw

lib/reactivity/quality/guarantee.ex

defmodule Reactivity.Quality.Guarantee do
@moduledoc """
Essential operations on guarantees.
For every guarantee, the function semantics needs to be implemented.
"""
@doc """
Returns the propagation semantics of a guarantee or set of guarantees.
"""
def semantics({:fu, _}), do: semantics(:fu)
def semantics({:c, _}), do: semantics(:c)
def semantics({:g, _}), do: semantics(:g)
def semantics({:fp, _}), do: semantics(:fp)
def semantics({:t, _}), do: semantics(:t)
def semantics(:fu), do: :update
def semantics(:c), do: :update
def semantics(:g), do: :update
def semantics(:fp), do: :propagate
def semantics(:t), do: :propagate
def semantics(gs) do
sems = gs
|> Enum.map(fn {cgt, _cgm} -> semantics(cgt) end)
propagate? = sems
|> Enum.any?(fn s -> s == :propagate end)
case propagate? do
true -> :propagate
false -> :update
end
end
@doc """
Combines lists of consistency guarantees.
"""
def combine(gss) do
gss
|> List.flatten
|> Enum.group_by(fn {g, _m} -> g end)
|> Map.values
|> Enum.map(
fn gs ->
Enum.min_by(gs, fn {_g, m} -> m end)
end)
|> List.flatten
end
end