Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/development/std/hash/scalars.nct

scalars.nct

//! Fixed-width Hash implementations for compiler built-in scalar values.

see ./index.nct

use /internal/ptr.{from_addr, pointee_size, slice_from_raw_parts}
use /ptr.{addr, from_ref}

func write_bool(state: &+HashState, value: &bool): void {
    let pointer: *bool = from_ref(value)
    let bytes_pointer: *u8 = from_addr(addr(pointer))
    state.write(slice_from_raw_parts(bytes_pointer, pointee_size(pointer)))
    return
}

func write_i8(state: &+HashState, value: &i8): void {
    let pointer: *i8 = from_ref(value)
    let bytes_pointer: *u8 = from_addr(addr(pointer))
    state.write(slice_from_raw_parts(bytes_pointer, pointee_size(pointer)))
    return
}

func write_i16(state: &+HashState, value: &i16): void {
    let pointer: *i16 = from_ref(value)
    let bytes_pointer: *u8 = from_addr(addr(pointer))
    state.write(slice_from_raw_parts(bytes_pointer, pointee_size(pointer)))
    return
}

func write_i32(state: &+HashState, value: &i32): void {
    let pointer: *i32 = from_ref(value)
    let bytes_pointer: *u8 = from_addr(addr(pointer))
    state.write(slice_from_raw_parts(bytes_pointer, pointee_size(pointer)))
    return
}

func write_i64(state: &+HashState, value: &i64): void {
    let pointer: *i64 = from_ref(value)
    let bytes_pointer: *u8 = from_addr(addr(pointer))
    state.write(slice_from_raw_parts(bytes_pointer, pointee_size(pointer)))
    return
}

func write_isize(state: &+HashState, value: &isize): void {
    let pointer: *isize = from_ref(value)
    let bytes_pointer: *u8 = from_addr(addr(pointer))
    state.write(slice_from_raw_parts(bytes_pointer, pointee_size(pointer)))
    return
}

func write_u8(state: &+HashState, value: &u8): void {
    let pointer: *u8 = from_ref(value)
    state.write(slice_from_raw_parts(pointer, pointee_size(pointer)))
    return
}

func write_u16(state: &+HashState, value: &u16): void {
    let pointer: *u16 = from_ref(value)
    let bytes_pointer: *u8 = from_addr(addr(pointer))
    state.write(slice_from_raw_parts(bytes_pointer, pointee_size(pointer)))
    return
}

func write_u32(state: &+HashState, value: &u32): void {
    let pointer: *u32 = from_ref(value)
    let bytes_pointer: *u8 = from_addr(addr(pointer))
    state.write(slice_from_raw_parts(bytes_pointer, pointee_size(pointer)))
    return
}

func write_u64(state: &+HashState, value: &u64): void {
    let pointer: *u64 = from_ref(value)
    let bytes_pointer: *u8 = from_addr(addr(pointer))
    state.write(slice_from_raw_parts(bytes_pointer, pointee_size(pointer)))
    return
}

func write_usize(state: &+HashState, value: &usize): void {
    let pointer: *usize = from_ref(value)
    let bytes_pointer: *u8 = from_addr(addr(pointer))
    state.write(slice_from_raw_parts(bytes_pointer, pointee_size(pointer)))
    return
}

instance bool {
    method &self.hash_into(state: &+HashState): void {
        write_bool(state, self)
        return
    }
}

instance i8 {
    method &self.hash_into(state: &+HashState): void {
        write_i8(state, self)
        return
    }
}

instance i16 {
    method &self.hash_into(state: &+HashState): void {
        write_i16(state, self)
        return
    }
}

instance i32 {
    method &self.hash_into(state: &+HashState): void {
        write_i32(state, self)
        return
    }
}

instance i64 {
    method &self.hash_into(state: &+HashState): void {
        write_i64(state, self)
        return
    }
}

instance isize {
    method &self.hash_into(state: &+HashState): void {
        write_isize(state, self)
        return
    }
}

instance u8 {
    method &self.hash_into(state: &+HashState): void {
        write_u8(state, self)
        return
    }
}

instance u16 {
    method &self.hash_into(state: &+HashState): void {
        write_u16(state, self)
        return
    }
}

instance u32 {
    method &self.hash_into(state: &+HashState): void {
        write_u32(state, self)
        return
    }
}

instance u64 {
    method &self.hash_into(state: &+HashState): void {
        write_u64(state, self)
        return
    }
}

instance usize {
    method &self.hash_into(state: &+HashState): void {
        write_usize(state, self)
        return
    }
}