lib/solver/domain/packed_min_max.ex
defmodule PackedMinMax do
import Bitwise
def get_min(packed, size \\ 32) do
packed &&& all_bits_mask(size)
end
def get_max(packed, size \\ 32) do
packed >>> size
end
def set_min(packed, min_value, size \\ 32) do
get_max(packed, size) <<< size ||| min_value
end
def set_max(packed, max_value, size \\ 32) do
max_value <<< size ||| get_min(packed, size)
end
defp all_bits_mask(size) do
(1 <<< size) - 1
end
end