Programming Language

Nocter

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

/development/std/ptr.nct

ptr.nct

//! Nocter raw pointer and address conversion API.
//!
//! Raw pointers are address-carrying values. They do not own memory, do not
//! extend lifetimes, and do not grant dereference permission. These declarations
//! are target-independent core primitives, separate from OS target primitives
//! such as `std/os.syscall0`.

pub primitive addr<T>(pointer: *T): usize

pub primitive from_ref<T>(value: &T): *T from value

pub primitive from_ref_mut<T>(value: &+T): *T from value

// Restricted API: callable only from modules inside the active Nocter home std/.
// User project modules must not call these functions.
pub(nocter) primitive from_addr<T>(address: usize): *T

pub(nocter) primitive pointee_size<T>(pointer: *T): usize

pub(nocter) primitive pointee_align<T>(pointer: *T): usize

pub(nocter) primitive copy_str_to_ptr(destination: *u8, offset: usize, text: &str): void

pub(nocter) primitive copy_ptr_to_ptr(destination: *u8, source: *u8, byte_count: usize): void

pub(nocter) primitive store_u8_to_ptr(destination: *u8, offset: usize, value: u8): void

pub(nocter) primitive store_value_to_ptr<T>(destination: *T, offset: usize, value: T): void

pub(nocter) primitive drop_value_at_ptr<T>(pointer: *T, offset: usize): void

pub(nocter) primitive take_value_at_ptr<T>(pointer: *T, offset: usize): T

pub(nocter) primitive str_from_raw_parts(pointer: *u8, len: usize): &str

pub(nocter) primitive slice_from_raw_parts(pointer: *u8, len: usize): &[u8]

pub(nocter) primitive slice_from_raw_parts_mut(pointer: *u8, len: usize): &+[u8]

pub(nocter) primitive slice_from_raw_parts_value<T>(pointer: *T, len: usize): &[T]

pub(nocter) primitive slice_from_raw_parts_value_mut<T>(pointer: *T, len: usize): &+[T]