Packages
fixpoint
0.7.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
defimpl Interface, for: Variable do
def id(var), do: var.id
def variable(var), do: var
def bind(var, store), do: Map.put(var, :store, store)
def map(_var, value), do: value
def domain(var), do: Variable.domain(var)
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)
end
defimpl Interface, for: View do
def id(view), do: view.variable.id
def variable(view), do: view.variable
def bind(%{variable: variable} = view, store) do
variable
|> Map.put(:store, store)
|> then(fn bound_var -> Map.put(view, :variable, bound_var) end)
end
def map(view, value), do: view.mapper.(value)
def domain(view), do: View.domain(view)
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)
end
defimpl Interface, for: Any do
def variable(_any), do: nil
def id(var), do: not_supported(:id, var)
def bind(var, _store), do: var
def map(var, _value), do: var
def domain(var), do: not_supported(:domain, var)
def size(var), do: not_supported(:size, var)
def min(var), do: not_supported(:min, var)
def max(var), do: not_supported(:max, var)
def fixed?(var), do: not_supported(:fixed?, var)
def contains?(var, _val), do: not_supported(:contains, var)
def remove(var, _val), do: not_supported(:remove, var)
def removeAbove(var, _val), do: not_supported(:removeAbove, var)
def removeBelow(var, _val), do: not_supported(:removeBelow, var)
def fix(var, _val), do: not_supported(:fix, var)
defp not_supported(var, op) do
throw({:operation_not_supported, op, for: 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 bind(var, store), to: Interface
defdelegate map(var, value), to: Interface
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)
defp handle_fail(:fail, var), do: throw({:fail, Interface.id(var)})
defp handle_fail(result, _var), do: result
end