diff --git a/src/services/DFGVariable.jl b/src/services/DFGVariable.jl index ea431905..fc22ab38 100644 --- a/src/services/DFGVariable.jl +++ b/src/services/DFGVariable.jl @@ -733,6 +733,20 @@ function mergeState!(v::VariableCompute, vnd::State) return 1 end +function mergeStates!(dfg::AbstractDFG, varLabel_state_pairs::Vector{Pair{Symbol, State}}) + cnt = asyncmap(varLabel_state_pairs) do (varLabel, state) + return mergeState!(dfg, varLabel, state) + end + return sum(cnt) +end + +function mergeStates!(dfg::AbstractDFG, variableLabel::Symbol, states::Vector{<:State}) + cnt = asyncmap(states) do state + return mergeState!(dfg, variableLabel, state) + end + return sum(cnt) +end + function copytoState!( dfg::AbstractDFG, variableLabel::Symbol, diff --git a/test/testBlocks.jl b/test/testBlocks.jl index 79143e74..f32b3b5e 100644 --- a/test/testBlocks.jl +++ b/test/testBlocks.jl @@ -787,6 +787,9 @@ function VSDTestBlock!(fg, v1) # Bulk copy update x0 @test DFG.copytoState!(fg, v1.label, :default, getState(fg, v1.label, :default)) == 1 + @test DFG.mergeStates!(fg, Vector{Pair{Symbol, State}}([:a=>vnd])) == 1 + @test DFG.mergeStates!(fg, [:a=>vnd]) == 1 + @test DFG.mergeStates!(fg, :a, [vnd]) == 1 altVnd = vnd |> deepcopy keepVnd = getState(getVariable(fg, :a), :parametric) |> deepcopy