#[macro_export]
macro_rules! non_zero_signed_opp
{
($integer:ident, $integer_type:ty) =>
{
{
let res: Result<$integer_type, <Self as TryInto<$integer_type>>::Error> = Self::try_into(*$integer);
match res
{
Ok(val) =>
{
let maybe_incd = val.overflowing_add(1);
if let Some(nz_incd) = Self::new(maybe_incd.0)
{
*$integer = nz_incd;
(*$integer, maybe_incd.1)
}
else
{
unsafe
{
*$integer = Self::new_unchecked(1);
}
(*$integer, false)
}
}
Err(_err) =>
{
unsafe
{
*$integer = Self::new_unchecked(1);
}
(*$integer, false)
}
}
}
}
}
#[macro_export]
macro_rules! non_zero_unsigned_opp
{
($integer:ident, $integer_type:ty) =>
{
{
let res: Result<$integer_type, <Self as TryInto<$integer_type>>::Error> = Self::try_into(*$integer);
match res
{
Ok(val) =>
{
let maybe_incd = val.overflowing_add(1);
if let Some(nz_incd) = Self::new(maybe_incd.0)
{
*$integer = nz_incd;
(*$integer, maybe_incd.1)
}
else
{
unsafe
{
*$integer = Self::new_unchecked(1);
}
(*$integer, true)
}
}
Err(_err) =>
{
unsafe
{
*$integer = Self::new_unchecked(1);
}
(*$integer, false)
}
}
}
}
}
#[macro_export]
macro_rules! non_zero_signed_omm
{
($integer:ident, $integer_type:ty) =>
{
{
let res: Result<$integer_type, <Self as TryInto<$integer_type>>::Error> = Self::try_into(*$integer);
match res
{
Ok(val) =>
{
let maybe_decd = val.overflowing_sub(1);
if let Some(nz_decd) = Self::new(maybe_decd.0)
{
*$integer = nz_decd;
(*$integer, maybe_decd.1)
}
else
{
unsafe
{
*$integer = Self::new_unchecked(-1);
}
(*$integer, false)
}
}
Err(_err) =>
{
unsafe
{
*$integer = Self::new_unchecked(-1);
}
(*$integer, false)
}
}
}
}
}
#[macro_export]
macro_rules! non_zero_unsigned_omm
{
($integer:ident, $integer_type:ty) =>
{
{
let res: Result<$integer_type, <Self as TryInto<$integer_type>>::Error> = Self::try_into(*$integer);
match res
{
Ok(val) =>
{
let maybe_decd = val.overflowing_sub(1);
if let Some(nz_decd) = Self::new(maybe_decd.0)
{
*$integer = nz_decd;
(*$integer, maybe_decd.1)
}
else
{
unsafe
{
*$integer = Self::new_unchecked(<$integer_type>::MAX)
}
(*$integer, true)
}
}
Err(_err) =>
{
unsafe
{
*$integer = Self::new_unchecked(1);
}
(*$integer, false)
}
}
}
}
}
#[macro_export]
macro_rules! non_zero_wpp
{
($integer:ident, $integer_type:ty) =>
{
{
let res: Result<$integer_type, <Self as TryInto<$integer_type>>::Error> = Self::try_into(*$integer);
match res
{
Ok(val) =>
{
let maybe_incd = val.wrapping_add(1);
if let Some(nz_incd) = Self::new(maybe_incd)
{
*$integer = nz_incd;
*$integer
}
else
{
unsafe
{
*$integer = Self::new_unchecked(1);
}
*$integer
}
}
Err(_err) =>
{
unsafe
{
*$integer = Self::new_unchecked(1);
}
*$integer
}
}
}
}
}
#[macro_export]
macro_rules! non_zero_signed_wmm
{
($integer:ident, $integer_type:ty) =>
{
{
let res: Result<$integer_type, <Self as TryInto<$integer_type>>::Error> = Self::try_into(*$integer);
match res
{
Ok(val) =>
{
let maybe_decd = val.wrapping_sub(1);
if let Some(nz_decd) = Self::new(maybe_decd)
{
*$integer = nz_decd;
*$integer
}
else
{
unsafe
{
*$integer = Self::new_unchecked(-1);
}
*$integer
}
}
Err(_err) =>
{
unsafe
{
*$integer = Self::new_unchecked(-1);
}
*$integer
}
}
}
}
}
#[macro_export]
macro_rules! non_zero_unsigned_wmm
{
($integer:ident, $integer_type:ty) =>
{
{
let res: Result<$integer_type, <Self as TryInto<$integer_type>>::Error> = Self::try_into(*$integer);
match res
{
Ok(val) =>
{
let maybe_decd = val.wrapping_sub(1);
if let Some(nz_decd) = Self::new(maybe_decd)
{
*$integer = nz_decd;
*$integer
}
else
{
unsafe
{
*$integer = Self::new_unchecked(<$integer_type>::MAX)
}
*$integer
}
}
Err(_err) =>
{
unsafe
{
*$integer = Self::new_unchecked(1);
}
*$integer
}
}
}
}
}