Packages
fixpoint
0.21.5
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/common/common.ex
defmodule CPSolver.Common do
alias CPSolver.Variable
alias CPSolver.Variable.View
@type domain_change :: :fixed | :domain_change | :min_change | :max_change
@type domain_get_operation :: :size | :fixed? | :min | :max | :contains?
@type domain_update_operation :: :remove | :removeAbove | :removeBelow | :fix
@type variable_or_view :: Variable.t() | View.t()
def domain_events() do
[:fixed, :domain_change, :min_change, :max_change]
end
## Value for unfixed variables.
##
def unfixed() do
:atomics.new(1, signed: true)
|> :atomics.info()
|> Map.get(:max)
end
## Choose a "stronger" domain change
## from two.
## "Stronger" domain change implies the weaker one.
## For instance,
## - :bound_change implies :domain_change;
## - :fixed implies all domain changes.
## - :domain_change implies no other domain changes.
def stronger_domain_change(nil, new_change) do
new_change
end
def stronger_domain_change(new_change, nil) do
new_change
end
def stronger_domain_change(:fixed, _new_change) do
:fixed
end
def stronger_domain_change(_current_change, :fixed) do
:fixed
end
def stronger_domain_change(:domain_change, new_change) do
new_change
end
def stronger_domain_change(current_change, :domain_change) do
current_change
end
def stronger_domain_change(:bound_change, bound_change)
when bound_change in [:min_change, :max_change] do
bound_change
end
def stronger_domain_change(bound_change, :bound_change)
when bound_change in [:min_change, :max_change] do
bound_change
end
def stronger_domain_change(:min_change, :max_change) do
:bound_change
end
def stronger_domain_change(:max_change, :min_change) do
:bound_change
end
def stronger_domain_change(current_change, new_change) when current_change == new_change do
current_change
end
end