///|
/// Class - corresponds to enum Class in all.h
pub(all) enum Class {
  Kx // -1, "top" class
  Kw
  Kl
  Ks
  Kd
} derive(Eq, Debug)

///|
/// Return 1 if wide (l/d), 0 otherwise (corresponds to C KWIDE()).
pub fn Class::wide(self : Class) -> Int {
  match self {
    Kx => 0
    Kw => 0
    Kl => 1
    Ks => 0
    Kd => 1
  }
}

///|
/// Return the base class: 0 for int (w/l), 1 for float (s/d) (corresponds to C KBASE()).
pub fn Class::base(self : Class) -> Int {
  match self {
    Kx => 0
    Kw => 0
    Kl => 0
    Ks => 1
    Kd => 1
  }
}

///|
/// Construct a class from its code: 0->Kw, 1->Kl, 2->Ks, 3->Kd, else Kx.
pub fn Class::from_code(c : Int) -> Class {
  match c {
    0 => Kw
    1 => Kl
    2 => Ks
    3 => Kd
    _ => Kx
  }
}

///|
/// Return the class code: Kx->-1, Kw->0, Kl->1, Ks->2, Kd->3.
pub fn Class::code(self : Class) -> Int {
  match self {
    Kx => -1
    Kw => 0
    Kl => 1
    Ks => 2
    Kd => 3
  }
}