Skip to main content

lib/chat_code/flag.ex

defmodule GW2.ChatCode.Flag do
  @moduledoc false
  import Bitwise

  @spec new() :: integer()
  def new, do: 0b00000000

  @spec check?(integer(), integer()) :: boolean()
  def check?(flags, flag), do: (flags &&& flag) != 0

  @spec maybe_check?(integer(), integer(), boolean()) :: boolean()
  def maybe_check?(flags, flag, true), do: check?(flags, flag)
  def maybe_check?(_flags, _flag, false), do: false

  @spec set(integer(), integer()) :: integer()
  def set(flags, flag), do: flags ||| flag

  @spec maybe_set(integer(), integer(), boolean()) :: integer()
  def maybe_set(flags, flag, true), do: set(flags, flag)
  def maybe_set(flags, _flag, false), do: flags
end