pub trait Print {
fn print(self);
}
impl Print for &'static str {
#[inline(always)]
fn print(self) {
for &c in self.as_bytes() {
unsafe { crate::__print_char_regint(c.into()) }
}
}
}
#[macro_export]
macro_rules! print {
($($e:expr),*) => {
$($crate::Print::print($e);)*
}
}
#[macro_export]
macro_rules! println {
($($e:expr),*) => {
$($crate::Print::print($e);)*
$crate::Print::print("\n");
}
}
macro_rules! impl_print {
($target: ty) => {
impl Print for $target {
#[inline(always)]
fn print(self) {
unsafe { crate::__print_int(self as i64) }
}
}
};
($($target: ty),*) => {
$(
impl Print for $target {
#[inline(always)]
fn print(self) {
unsafe { crate::__print_int(self as i64) }
}
}
)*
};
}
impl_print!(isize, usize, i128, u128, i64, u64, i32, u32, i16, u16, i8, u8, bool);