Initial commit
This commit is contained in:
commit
7c512ab94f
26 changed files with 729 additions and 0 deletions
59
crates/std/src/arena/ptr.rs
Normal file
59
crates/std/src/arena/ptr.rs
Normal file
|
@ -0,0 +1,59 @@
|
|||
use std::num::NonZeroU32;
|
||||
|
||||
#[macro_export]
|
||||
#[doc(hidden)]
|
||||
macro_rules! _ptrs {
|
||||
($(
|
||||
$(#[$outer:meta])*
|
||||
$vis:vis struct $name:ident;
|
||||
)*) => {$(
|
||||
$(#[$outer])*
|
||||
#[derive(
|
||||
Debug,
|
||||
Clone,
|
||||
Copy,
|
||||
PartialEq,
|
||||
Eq,
|
||||
PartialOrd,
|
||||
Ord,
|
||||
Hash,
|
||||
)]
|
||||
$vis struct $name(::core::num::NonZeroU32);
|
||||
|
||||
impl $name {
|
||||
/// Create instance of the pointer.
|
||||
pub const fn new(v: ::core::num::NonZeroU32) -> Self {
|
||||
Self(v)
|
||||
}
|
||||
|
||||
pub const fn get(&self) -> ::core::num::NonZeroU32 {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl ::core::convert::From<$name> for ::core::num::NonZeroU32 {
|
||||
fn from(value: $name) -> Self {
|
||||
value.get()
|
||||
}
|
||||
}
|
||||
|
||||
impl ::core::convert::From<::core::num::NonZeroU32> for $name {
|
||||
fn from(value: ::core::num::NonZeroU32) -> Self {
|
||||
Self::new(value)
|
||||
}
|
||||
}
|
||||
|
||||
impl $crate::arena::ptr::Ptr for $name {
|
||||
fn get(&self) -> ::core::num::NonZeroU32 {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
)*};
|
||||
}
|
||||
|
||||
/// Pointer in arena.
|
||||
pub trait Ptr {
|
||||
fn get(&self) -> NonZeroU32;
|
||||
}
|
||||
|
||||
pub use crate::_ptrs as define;
|
Loading…
Add table
Add a link
Reference in a new issue