use std::{
io::{Read, StdinLock},
ops::Shr,
str::FromStr,
};
use super::{IStream, Status, as_read::AsRead, into_istream::IntoIStream};
pub struct Cin;
impl IntoIStream for Cin {
type Reader = StdinLock<'static>;
#[inline]
fn into_istream(self) -> IStream<Self::Reader> {
IStream::new(std::io::stdin().lock())
}
}
impl From<Cin> for IStream<StdinLock<'static>> {
#[inline]
fn from(cin: Cin) -> Self {
cin.into_istream()
}
}
impl<T: FromStr> Shr<&mut T> for Cin {
type Output = Result<Status, T::Err>;
#[inline]
fn shr(self, rhs: &mut T) -> Self::Output {
Into::<IStream<StdinLock>>::into(self) >> rhs
}
}
impl AsRead for &mut Cin {
#[inline]
fn as_read(&mut self) -> impl Read {
std::io::stdin().lock()
}
}
impl AsRead for Cin {
#[inline]
fn as_read(&mut self) -> impl Read {
std::io::stdin().lock()
}
}