Crate int_like

Source
Expand description

§int_like

A Rust macro for defining integer-backed opaque types safely.

This crate provides a convenient way to create new types that are backed by primitive integers (typically usize), providing type safety without compromising performance.

The original code was inspired by Redox OS and has been adapted for general use.

§Examples

§Simple Opaque Type

use int_like::int_like;

/// Define an opaque type `Pid` backed by a `usize`.
int_like!(Pid, usize);

const ZERO: Pid = Pid::from(0);
let pid = Pid::from(42);
assert_eq!(pid.into(), 42);

§With Atomic Support

use int_like::int_like;
use std::sync::atomic::{AtomicUsize, Ordering};

/// Define opaque types `Pid` and `AtomicPid`, backed respectively by a `usize`
/// and an `AtomicUsize`.
int_like!(Pid, AtomicPid, usize, AtomicUsize);

const ZERO: Pid = Pid::from(0);
let ATOMIC_PID: AtomicPid = AtomicPid::default();

// Atomic operations
ATOMIC_PID.store(Pid::from(100), Ordering::SeqCst);
let value = ATOMIC_PID.load(Ordering::SeqCst);
assert_eq!(value, Pid::from(100));

Helpers used to define types that are backed by integers (typically usize), without compromising safety.

§Example

use int_like::int_like;

/// Define an opaque type `Pid` backed by a `usize`.
int_like!(Pid, usize);

const ZERO: Pid = Pid::from(0);

§Example

use int_like::int_like;
use std::sync::atomic::AtomicUsize;

/// Define opaque types `Pid` and `AtomicPid`, backed respectively by a `usize`
/// and a `AtomicUsize`.
int_like!(Pid, AtomicPid, usize, AtomicUsize);

const ZERO: Pid = Pid::from(0);
let ATOMIC_PID: AtomicPid = AtomicPid::default();

Macros§

int_like