#[cfg_attr(all(feature = "f32", feature = "f64"), doc = " ```rust")]
#[cfg_attr(not(all(feature = "f32", feature = "f64")), doc = " ```rust,ignore")]
#[macro_export]
macro_rules! storage_types {
($(#[$attr:meta])* $vis:vis types: $($T:ident),+; $($tt:tt)*) => {
storage_types_types!(($(#[$attr])*) $vis $($T),+; ($($tt)*));
};
($($tt:tt)*) => {
storage_types! {
types: All;
$($tt)*
}
};
}
#[macro_export]
#[doc(hidden)]
macro_rules! storage_types_types {
($attr:tt $vis:vis $($T:ident),+; $tt:tt) => {
$(storage_types_type!($attr $vis $T $tt);)+
};
}
#[macro_export]
#[doc(hidden)]
macro_rules! storage_types_type {
($attr:tt $vis:vis usize $tt:tt) => {
storage_type_usize!($attr, $vis, $tt);
};
($attr:tt $vis:vis u8 $tt:tt) => {
storage_type_u8!($attr, $vis, $tt);
};
($attr:tt $vis:vis u16 $tt:tt) => {
storage_type_u16!($attr, $vis, $tt);
};
($attr:tt $vis:vis u32 $tt:tt) => {
storage_type_u32!($attr, $vis, $tt);
};
($attr:tt $vis:vis u64 $tt:tt) => {
storage_type_u64!($attr, $vis, $tt);
};
($attr:tt $vis:vis u128 $tt:tt) => {
storage_type_u128!($attr, $vis, $tt);
};
($attr:tt $vis:vis isize $tt:tt) => {
storage_type_isize!($attr, $vis, $tt);
};
($attr:tt $vis:vis i8 $tt:tt) => {
storage_type_i8!($attr, $vis, $tt);
};
($attr:tt $vis:vis i16 $tt:tt) => {
storage_type_i16!($attr, $vis, $tt);
};
($attr:tt $vis:vis i32 $tt:tt) => {
storage_type_i32!($attr, $vis, $tt);
};
($attr:tt $vis:vis i64 $tt:tt) => {
storage_type_i64!($attr, $vis, $tt);
};
($attr:tt $vis:vis i128 $tt:tt) => {
storage_type_i128!($attr, $vis, $tt);
};
($attr:tt $vis:vis BigInt $tt:tt) => {
storage_type_bigint!($attr, $vis, $tt);
};
($attr:tt $vis:vis BigUint $tt:tt) => {
storage_type_biguint!($attr, $vis, $tt);
};
($attr:tt $vis:vis Rational $tt:tt) => {
storage_type_rational!($attr, $vis, $tt);
};
($attr:tt $vis:vis Rational32 $tt:tt) => {
storage_type_rational32!($attr, $vis, $tt);
};
($attr:tt $vis:vis Rational64 $tt:tt) => {
storage_type_rational64!($attr, $vis, $tt);
};
($attr:tt $vis:vis BigRational $tt:tt) => {
storage_type_bigrational!($attr, $vis, $tt);
};
($attr:tt $vis:vis Complex32 $tt:tt) => {
storage_type_complex32!($attr, $vis, $tt);
};
($attr:tt $vis:vis Complex64 $tt:tt) => {
storage_type_complex64!($attr, $vis, $tt);
};
($attr:tt $vis:vis f32 $tt:tt) => {
storage_type_f32!($attr, $vis, $tt);
};
($attr:tt $vis:vis f64 $tt:tt) => {
storage_type_f64!($attr, $vis, $tt);
};
($attr:tt $vis:vis All $tt:tt) => {
storage_type_usize!($attr, $vis, $tt);
storage_type_u8!($attr, $vis, $tt);
storage_type_u16!($attr, $vis, $tt);
storage_type_u32!($attr, $vis, $tt);
storage_type_u64!($attr, $vis, $tt);
storage_type_u128!($attr, $vis, $tt);
storage_type_isize!($attr, $vis, $tt);
storage_type_i8!($attr, $vis, $tt);
storage_type_i16!($attr, $vis, $tt);
storage_type_i32!($attr, $vis, $tt);
storage_type_i64!($attr, $vis, $tt);
storage_type_i128!($attr, $vis, $tt);
storage_type_bigint!($attr, $vis, $tt);
storage_type_biguint!($attr, $vis, $tt);
storage_type_rational!($attr, $vis, $tt);
storage_type_rational32!($attr, $vis, $tt);
storage_type_rational64!($attr, $vis, $tt);
storage_type_bigrational!($attr, $vis, $tt);
storage_type_complex32!($attr, $vis, $tt);
storage_type_complex64!($attr, $vis, $tt);
storage_type_f32!($attr, $vis, $tt);
storage_type_f64!($attr, $vis, $tt);
};
($attr:tt $vis:vis PrimInt $tt:tt) => {
storage_type_usize!($attr, $vis, $tt);
storage_type_u8!($attr, $vis, $tt);
storage_type_u16!($attr, $vis, $tt);
storage_type_u32!($attr, $vis, $tt);
storage_type_u64!($attr, $vis, $tt);
storage_type_u128!($attr, $vis, $tt);
storage_type_isize!($attr, $vis, $tt);
storage_type_i8!($attr, $vis, $tt);
storage_type_i16!($attr, $vis, $tt);
storage_type_i32!($attr, $vis, $tt);
storage_type_i64!($attr, $vis, $tt);
storage_type_i128!($attr, $vis, $tt);
};
($attr:tt $vis:vis Ratio $tt:tt) => {
storage_type_rational!($attr, $vis, $tt);
storage_type_rational32!($attr, $vis, $tt);
storage_type_rational64!($attr, $vis, $tt);
storage_type_bigrational!($attr, $vis, $tt);
};
($attr:tt $vis:vis Float $tt:tt) => {
storage_type_f32!($attr, $vis, $tt);
storage_type_f64!($attr, $vis, $tt);
};
($attr:tt $vis:vis Signed $tt:tt) => {
storage_type_isize!($attr, $vis, $tt);
storage_type_i8!($attr, $vis, $tt);
storage_type_i16!($attr, $vis, $tt);
storage_type_i32!($attr, $vis, $tt);
storage_type_i64!($attr, $vis, $tt);
storage_type_i128!($attr, $vis, $tt);
storage_type_bigint!($attr, $vis, $tt);
storage_type_rational!($attr, $vis, $tt);
storage_type_rational32!($attr, $vis, $tt);
storage_type_rational64!($attr, $vis, $tt);
storage_type_bigrational!($attr, $vis, $tt);
storage_type_f32!($attr, $vis, $tt);
storage_type_f64!($attr, $vis, $tt);
};
($attr:tt $vis:vis Unsigned $tt:tt) => {
storage_type_usize!($attr, $vis, $tt);
storage_type_u8!($attr, $vis, $tt);
storage_type_u16!($attr, $vis, $tt);
storage_type_u32!($attr, $vis, $tt);
storage_type_u64!($attr, $vis, $tt);
storage_type_u128!($attr, $vis, $tt);
storage_type_biguint!($attr, $vis, $tt);
};
($attr:tt $vis:vis Complex $tt:tt) => {
storage_type_complex32!($attr, $vis, $tt);
storage_type_complex64!($attr, $vis, $tt);
};
}
#[macro_export]
#[doc(hidden)]
macro_rules! storage_types_mod {
(($(#[$attr:meta])*) $vis:vis $M:ident, $V:ty $(, $VV:ty)?; ($($tt:tt)*)) => {
$(#[$attr])*
$vis mod $M {
#[allow(dead_code)]
$vis type V = $V;
$(
/// Inner storage type.
#[allow(dead_code)]
$vis type VV = $VV;
)?
$($tt)*
}
};
}
macro_rules! storage_type_types {
($($macro_name:ident!($feature:literal, $name:ident, ($($type:tt)+) $(, $VV:ty)?);)+) => {
$(#[macro_export]
#[doc(hidden)]
#[cfg(feature = $feature)]
macro_rules! $macro_name {
($attr:tt, $vis:vis, $tt:tt) => {
storage_types_mod!($attr $vis $name, $($type)+ $(, $VV)?; $tt);
};
}
#[macro_export]
#[doc(hidden)]
#[cfg(not(feature = $feature))]
macro_rules! $macro_name {
($attr:tt, $vis:vis, $tt:tt) => {
};
})+
};
}
storage_type_types! {
storage_type_usize!("usize", usize, (usize));
storage_type_u8!("u8", u8, (u8));
storage_type_u16!("u16", u16, (u16));
storage_type_u32!("u32", u32, (u32));
storage_type_u64!("u64", u64, (u64));
storage_type_u128!("u128", u128, (u128));
storage_type_isize!("isize", isize, (isize));
storage_type_i8!("i8", i8, (i8));
storage_type_i16!("i16", i16, (i16));
storage_type_i32!("i32", i32, (i32));
storage_type_i64!("i64", i64, (i64));
storage_type_i128!("i128", i128, (i128));
storage_type_bigint!("bigint", bigint, ($crate::num::BigInt));
storage_type_biguint!("biguint", biguint, ($crate::num::BigUint));
storage_type_rational!("rational", rational, ($crate::num::Rational));
storage_type_rational32!("rational32", rational32, ($crate::num::rational::Rational32));
storage_type_rational64!("rational64", rational64, ($crate::num::rational::Rational64));
storage_type_bigrational!("bigrational", bigrational, ($crate::num::BigRational));
storage_type_complex32!("complex32", complex32, ($crate::num::complex::Complex32), f32);
storage_type_complex64!("complex64", complex64, ($crate::num::complex::Complex64), f64);
storage_type_f32!("f32", f32, (f32));
storage_type_f64!("f64", f64, (f64));
}