Current section
Files
Jump to
Current section
Files
lib/evaluation/commands/commands_generation.ex
defmodule Evaluation.Commands.CommandsGeneration do
@moduledoc false
alias Evaluation.Graph
def generateCommandsDelay(g, params) do
[]
|> generateVarCommandsDelay(g, params)
|> generateSignalCommands(g)
|> generateFinalCommands(g)
|> Enum.reverse
end
def generateCommandsTraffic(g, params) do
[]
|> generateVarCommandsTraffic(g, params)
|> generateSignalCommands(g)
|> Enum.reverse
end
defp generateVarCommandsTraffic(cs, g, params) do
generateVarCommandsTraffic(cs, Graph.getVars(g), g, params)
end
defp generateVarCommandsTraffic(cs, [], _g, _params), do: cs
defp generateVarCommandsTraffic(cs, [v | vst], g, params) do
h = Graph.getHost(g, v)
im = Keyword.get(params, :update_interval_mean)
isd = Keyword.get(params, :update_interval_sd)
vm = Keyword.get(params, :values_mean)
vsd = Keyword.get(params, :values_sd)
new_c = {:var, v, h, im, isd, vm, vsd}
generateVarCommandsTraffic([new_c | cs], vst, g, params)
end
defp generateVarCommandsDelay(cs, g, params) do
generateVarCommandsDelay(cs, Graph.getVars(g), g, params)
end
defp generateVarCommandsDelay(cs, [], _g, _params), do: cs
defp generateVarCommandsDelay(cs, [v | vst], g, params) do
h = Graph.getHost(g, v)
im = Keyword.get(params, :update_interval_mean)
isd = Keyword.get(params, :update_interval_sd)
new_c = {:var, v, h, im, isd}
generateVarCommandsDelay([new_c | cs], vst, g, params)
end
defp generateSignalCommands(cs, g) do
generateSignalCommands(cs, Graph.getSignalLevels(g), g)
end
defp generateSignalCommands(cs, [], _g), do: cs
defp generateSignalCommands(cs, [[] | sst], g), do: generateSignalCommands(cs, sst, g)
defp generateSignalCommands(cs, [[s | st] | sst], g) do
h = Graph.getHost(g, s)
deps = Graph.getDeps(g, s)
new_c = {:signal, s, h, deps}
generateSignalCommands([new_c | cs], [st | sst], g)
end
defp generateFinalCommands(cs, g) do
vars = Graph.getVars(g) -- Graph.getFinalNodes(g)
finals = Enum.map(vars, fn v -> Graph.getFinalNodesForVar(g, v) end)
finals_for_vars = Enum.zip(vars, finals)
generateFinalCommands(cs, finals_for_vars, g)
end
defp generateFinalCommands(cs, [], _g), do: cs
defp generateFinalCommands(cs, [{_var, []} | ffvst], g) do
generateFinalCommands(cs, ffvst, g)
end
defp generateFinalCommands(cs, [{var, [f | ft]} | ffvst], g) do
h = Graph.getHost(g, var)
new_c = {:final, var, f, h}
generateFinalCommands([new_c | cs], [{var, ft} | ffvst], g)
end
end