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

///|
/// kwide - 1 if wide (l/d), 0 otherwise (corresponds to C KWIDE())
#as_free_fn(kwide, deprecated="use `Class::wide` instead")
pub fn Class::wide(self : Class) -> Int {
  match self {
    Kx => 0
    Kw => 0
    Kl => 1
    Ks => 0
    Kd => 1
  }
}

///|
/// kbase - base class: 0 for int (w/l), 1 for float (s/d) (corresponds to C KBASE())
#as_free_fn(kbase, deprecated="use `Class::base` instead")
pub fn Class::base(self : Class) -> Int {
  match self {
    Kx => 0
    Kw => 0
    Kl => 0
    Ks => 1
    Kd => 1
  }
}

///|
/// class_from_code - inverse of kcode: 0->Kw, 1->Kl, 2->Ks, 3->Kd, else Kx.
#as_free_fn(class_from_code, deprecated="use `Class::from_code` instead")
pub fn Class::from_code(c : Int) -> Class {
  match c {
    0 => Kw
    1 => Kl
    2 => Ks
    3 => Kd
    _ => Kx
  }
}

///|
/// kcode - class to code: Kx->-1, Kw->0, Kl->1, Ks->2, Kd->3.
#as_free_fn(kcode, deprecated="use `Class::code` instead")
pub fn Class::code(self : Class) -> Int {
  match self {
    Kx => -1
    Kw => 0
    Kl => 1
    Ks => 2
    Kd => 3
  }
}