use std::{fmt, ops};
use crate::{Handle, hsize};
#[repr(transparent)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub(crate) struct Checked<H: Handle>(H);
impl<H: Handle> Checked<H> {
#[inline(always)]
pub unsafe fn new(handle: H) -> Self {
Self(handle)
}
}
impl<H: Handle> optional::Noned for Checked<H> {
fn is_none(&self) -> bool {
self.0.idx() == hsize::max_value()
}
fn get_none() -> Self {
Self(H::new(hsize::max_value()))
}
}
impl<H: Handle> optional::OptEq for Checked<H> {
fn opt_eq(&self, other: &Self) -> bool {
self == other
}
}
impl<H: Handle> fmt::Debug for Checked<H> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
self.0.fmt(f)
}
}
impl<H: Handle> ops::Deref for Checked<H> {
type Target = H;
fn deref(&self) -> &Self::Target {
&self.0
}
}