Packages
fixpoint
0.16.4
0.22.1
0.21.5
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.6
0.20.5
0.20.4
0.20.3
0.20.2
0.20.1
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.18.2
0.18.1
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.13.5
0.13.4
0.13.2
0.13.1
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.2
0.12.1
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.46
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.28
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.1.3
0.1.2
0.1.1
0.1.0
Constraint Programming Solver
Current section
Files
Jump to
Current section
Files
lib/solver/variables/api_impl.ex
alias CPSolver.Variable.Interface
alias CPSolver.Variable
alias CPSolver.Variable.View
alias CPSolver.DefaultDomain, as: Domain
defimpl Interface, for: Variable do
def id(var), do: var.id
def variable(var), do: var
def map(_var, value), do: value
def domain(var), do: Variable.domain(var)
def iterator(var, opts \\ []), do: Variable.iterator(var, opts)
def size(var), do: Variable.size(var)
def min(var), do: Variable.min(var)
def max(var), do: Variable.max(var)
def fixed?(var), do: Variable.fixed?(var)
def contains?(var, val), do: Variable.contains?(var, val)
def remove(var, val), do: Variable.remove(var, val)
def removeAbove(var, val), do: Variable.removeAbove(var, val)
def removeBelow(var, val), do: Variable.removeBelow(var, val)
def fix(var, val), do: Variable.fix(var, val)
def update(var, field, value), do: Map.put(var, field, value)
end
defimpl Interface, for: View do
def id(view), do: view.variable.id
def variable(view), do: view.variable
def map(view, value), do: View.get_mapper(view).(value)
def domain(view), do: View.domain(view)
def iterator(var, opts \\ []), do: View.iterator(var, opts)
def size(view), do: View.size(view)
def min(view), do: View.min(view)
def max(view), do: View.max(view)
def fixed?(view), do: View.fixed?(view)
def contains?(view, val), do: View.contains?(view, val)
def remove(view, val), do: View.remove(view, val)
def removeAbove(view, val), do: View.removeAbove(view, val)
def removeBelow(view, val), do: View.removeBelow(view, val)
def fix(view, val), do: View.fix(view, val)
def update(view, field, value) do
updated_variable = Map.put(variable(view), field, value)
Map.put(view, :variable, updated_variable)
end
end
defimpl Interface, for: Integer do
def variable(_any), do: nil
def id(_val), do: nil
defdelegate map(val, mapper), to: Domain
def iterator(var, _opts), do: List.wrap(var)
def domain(val), do: val
defdelegate size(val), to: Domain
defdelegate min(val), to: Domain
defdelegate max(val), to: Domain
defdelegate fixed?(val), to: Domain
defdelegate contains?(val, value), to: Domain
defdelegate remove(val, remove_val), to: Domain
defdelegate removeAbove(val, removeAbove), to: Domain
defdelegate removeBelow(val, removeBelow), to: Domain
defdelegate fix(value, fixed_value), to: Domain
def update(val, _field, _value), do: val
end
defimpl Interface, for: Any do
def variable(_any), do: nil
def id(non_var), do: not_supported(:id, non_var)
def map(non_var, _value), do: non_var
def iterator(non_var, _opts), do: not_supported(:domain, non_var)
def domain(non_var), do: not_supported(:domain, non_var)
def size(non_var), do: not_supported(:size, non_var)
def min(non_var), do: not_supported(:min, non_var)
def max(non_var), do: not_supported(:max, non_var)
def fixed?(_), do: true
def contains?(non_var, _val), do: not_supported(:contains, non_var)
def remove(non_var, _val), do: not_supported(:remove, non_var)
def removeAbove(non_var, _val), do: not_supported(:removeAbove, non_var)
def removeBelow(non_var, _val), do: not_supported(:removeBelow, non_var)
def fix(non_var, _val), do: not_supported(:fix, non_var)
def update(non_var, _field, _value), do: not_supported(:update, non_var)
defp not_supported(non_var, op) do
throw({:operation_not_supported, op, for: non_var})
end
end
defmodule CPSolver.Variable.Interface.ThrowIfFails do
alias CPSolver.Variable.Interface
@behaviour Interface
defdelegate id(var), to: Interface
defdelegate variable(var), to: Interface
defdelegate map(var, value), to: Interface
def iterator(_var, _opts), do: :ignore
def domain(var), do: handle_fail(Interface.domain(var), var)
def size(var), do: handle_fail(Interface.size(var), var)
def min(var), do: handle_fail(Interface.min(var), var)
def max(var), do: handle_fail(Interface.max(var), var)
def fixed?(var), do: handle_fail(Interface.fixed?(var), var)
def contains?(var, val), do: handle_fail(Interface.contains?(var, val), var)
def remove(var, val), do: handle_fail(Interface.remove(var, val), var)
def removeAbove(var, val), do: handle_fail(Interface.removeAbove(var, val), var)
def removeBelow(var, val), do: handle_fail(Interface.removeBelow(var, val), var)
def fix(var, val), do: handle_fail(Interface.fix(var, val), var)
def update(var, field, value), do: handle_fail(Interface.update(var, field, value), var)
defp handle_fail(:fail, _var), do: throw(:fail)
defp handle_fail(result, _var), do: result
end