wintf 0.0.2

Windows Tategaki Framework - Rust UI library with Japanese vertical text support
use core::hash::*;
use windows_numerics::*;

pub(crate) trait CalcHash {
    fn calc_hash<H: Hasher>(&self, state: &mut H);
}

#[inline]
fn f32_norm_bits(f: f32) -> u32 {
    if f == 0.0 { 0 } else { f.to_bits() }
}

impl CalcHash for f32 {
    #[inline]
    fn calc_hash<H: Hasher>(&self, state: &mut H) {
        f32_norm_bits(*self).hash(state);
    }
}

impl CalcHash for Vector2 {
    #[inline]
    fn calc_hash<H: Hasher>(&self, state: &mut H) {
        self.X.calc_hash(state);
        self.Y.calc_hash(state);
    }
}

impl CalcHash for Matrix3x2 {
    #[inline]
    fn calc_hash<H: Hasher>(&self, state: &mut H) {
        self.M11.calc_hash(state);
        self.M12.calc_hash(state);
        self.M21.calc_hash(state);
        self.M22.calc_hash(state);
        self.M31.calc_hash(state);
        self.M32.calc_hash(state);
    }
}