decimus 0.0.6

Decimal Floating-Point Math Library for Rust
Documentation
macro_rules! __l0_normalize_10to18 {
  ($x_hi:expr, $x_lo:expr) => {
    let l0_tmp: BidUint64 = $x_lo + BID_TWOTO60_M_10TO18;
    if (l0_tmp & BID_TWOTO60) > 0 {
      $x_hi += 1;
      $x_lo = (l0_tmp << 4) >> 4;
    }
  };
}

pub(crate) use __l0_normalize_10to18;

macro_rules! __l0_split_midi_2 {
  ($x:expr, $midi: expr, $ptr:expr) => {
    let mut l0_head: BidUint32 = $x >> 10;
    let mut l0_tail: BidUint32 = ($x & 0x03FF) + (l0_head << 5) - (l0_head << 3);
    let l0_tmp: BidUint32 = (l0_tail) >> 10;
    l0_head += l0_tmp;
    l0_tail = (l0_tail & (0x03FF)) + (l0_tmp << 5) - (l0_tmp << 3);
    if (l0_tail > 999) {
      l0_tail -= 1000;
      l0_head += 1;
    }
    set!(l0_head, $midi, $ptr);
    set!(l0_tail, $midi, $ptr);
  };
}

pub(crate) use __l0_split_midi_2;

macro_rules! __l0_split_midi_3 {
  ($x:expr, $midi: expr, $ptr:expr) => {
    let mut l0_x: BidUint32 = $x as u32;
    let mut l0_head: BidUint32 = ((l0_x >> 17) * 34359) >> 18;
    l0_x -= l0_head * 1000000;
    if (l0_x >= 1000000) {
      l0_x -= 1000000;
      l0_head += 1;
    }
    let mut l0_mid: BidUint32 = l0_x >> 10;
    let mut l0_tail: BidUint32 = (l0_x & (0x03FF)) + (l0_mid << 5) - (l0_mid << 3);
    let l0_tmp: BidUint32 = (l0_tail) >> 10;
    l0_mid += l0_tmp;
    l0_tail = (l0_tail & (0x3FF)) + (l0_tmp << 5) - (l0_tmp << 3);
    if (l0_tail > 999) {
      l0_tail -= 1000;
      l0_mid += 1;
    }
    set!(l0_head, $midi, $ptr);
    set!(l0_mid, $midi, $ptr);
    set!(l0_tail, $midi, $ptr);
  };
}

pub(crate) use __l0_split_midi_3;

macro_rules! __l0_split_midi_6 {
  ($x:expr, $midi: expr, $ptr:expr) => {
    let mut l1_xhi_64: BidUint64 = (($x >> 28) * (BID_INV_TENTO9 as u64)) >> 33;
    let mut l1_xlo_64: BidUint64 = $x - l1_xhi_64 * (BID_TENTO9 as u64);
    if (l1_xlo_64 >= (BID_TENTO9 as u64)) {
      l1_xlo_64 -= (BID_TENTO9 as u64);
      l1_xhi_64 += 1;
    }
    let l1_x_hi: BidUint32 = l1_xhi_64 as u32;
    let l1_x_lo: BidUint32 = l1_xlo_64 as u32;
    __l0_split_midi_3!(l1_x_hi, $midi, $ptr);
    __l0_split_midi_3!(l1_x_lo, $midi, $ptr);
  };
}

pub(crate) use __l0_split_midi_6;

macro_rules! __l0_split_midi_6_lead {
  ($x:expr, $midi: expr, $ptr:expr) => {
    let l1_x_lo: BidUint32;
    if $x >= BID_TENTO9 as u64 {
      let mut l1_xhi_64: BidUint64 = (($x >> 28) * BID_INV_TENTO9) >> 33;
      let mut l1_xlo_64: BidUint64 = $x - l1_xhi_64 * (BID_TENTO9 as u64);
      if l1_xlo_64 >= BID_TENTO9 as u64 {
        l1_xlo_64 -= (BID_TENTO9 as u64);
        l1_xhi_64 += 1;
      }
      let l1_x_hi: BidUint32 = l1_xhi_64 as u32;
      l1_x_lo = l1_xlo_64 as u32;
      if (l1_x_hi >= BID_TENTO6) {
        __l0_split_midi_3!(l1_x_hi, $midi, $ptr);
        __l0_split_midi_3!(l1_x_lo, $midi, $ptr);
      } else if (l1_x_hi >= BID_TENTO3) {
        __l0_split_midi_2!(l1_x_hi, $midi, $ptr);
        __l0_split_midi_3!(l1_x_lo, $midi, $ptr);
      } else {
        set!(l1_x_hi, $midi, $ptr);
        __l0_split_midi_3!(l1_x_lo, $midi, $ptr);
      }
    } else {
      l1_x_lo = $x as u32;
      if (l1_x_lo >= BID_TENTO6) {
        __l0_split_midi_3!(l1_x_lo, $midi, $ptr);
      } else if (l1_x_lo >= BID_TENTO3) {
        __l0_split_midi_2!(l1_x_lo, $midi, $ptr);
      } else {
        set!(l1_x_lo, $midi, $ptr);
      }
    }
  };
}

pub(crate) use __l0_split_midi_6_lead;

macro_rules! __l0_midi2str {
  ($x:expr, $str:expr, $ptr:expr) => {
    let digits = BID_MIDI_TBL[$x as usize];
    $str[$ptr] = digits[0];
    $ptr += 1;
    $str[$ptr] = digits[1];
    $ptr += 1;
    $str[$ptr] = digits[2];
    $ptr += 1;
  };
}

pub(crate) use __l0_midi2str;

macro_rules! __l0_midi2str_lead {
  ($x:expr, $str:expr, $ptr:expr) => {
    let digits = BID_MIDI_TBL[$x as usize];
    if $x >= 100 {
      $str[$ptr] = digits[0];
      $ptr += 1;
      $str[$ptr] = digits[1];
      $ptr += 1;
      $str[$ptr] = digits[2];
      $ptr += 1;
    } else if $x >= 10 {
      $str[$ptr] = digits[1];
      $ptr += 1;
      $str[$ptr] = digits[2];
      $ptr += 1;
    } else {
      $str[$ptr] = digits[2];
      $ptr += 1;
    }
  };
}

pub(crate) use __l0_midi2str_lead;