defmodule CPSolver.Variables.UnfixedTracker do
alias InPlace.SparseSet
alias CPSolver.Utils.Vector
alias CPSolver.Variable.Interface
def new(variables) when is_list(variables) do
new(Vector.new(variables))
end
def new(variables) do
variables
|> Vector.size()
|> SparseSet.new()
|> update(variables)
end
def update(tracker, variables) do
each(tracker, fn var_idx ->
Interface.fixed?(variables[var_idx - 1]) && delete(tracker, var_idx)
end)
tracker
end
def copy(tracker) do
SparseSet.copy(tracker)
end
def delete(tracker, idx) do
SparseSet.delete(tracker, idx)
end
def serialize(tracker) do
SparseSet.serialize(tracker)
end
def deserialize(tracker) do
SparseSet.deserialize(tracker)
end
def each(tracker, action) do
SparseSet.each(tracker, action)
end
def iterate_ordered(tracker, initial, reducer) do
SparseSet.iterate_ordered(tracker, initial, reducer)
end
def empty?(tracker) do
SparseSet.empty?(tracker)
end
end