macro_rules! scan {
(via $scanner:expr, $($rest:tt)*) => { ... };
(@via [$via:expr] @rest) => { ... };
(@via [$via:expr] @rest ,) => { ... };
(@via [$via:expr] @rest mut $($rest:tt)*) => { ... };
(@via [$via:expr] @rest $($rest:tt)*) => { ... };
(@via [$via:expr] @mut [$($mut:tt)?] @rest $var:tt : $t:tt) => { ... };
(@via [$via:expr] @mut [$($mut:tt)?] @rest $var:tt : $t:tt , $($rest:tt)*) => { ... };
}Expand description
Macro for convenient input scanning with variable declarations.
For direct token scanning, see Scanner::scan().
§Special Types
Usize1: Converts 1-indexed input to 0-indexed (subtracts 1)Chars: Reads a string and converts it toVec<char>Bytes: Reads a string and converts it toVec<u8>
§Examples
§Basic usage
use scanner::{Scanner, scan};
let mut scanner = Scanner::cursor("3 10\n1 2 3");
scan! {
via scanner,
(n, k): (usize, usize),
a: [i32; n],
};
assert_eq!((n, k), (3, 10));
assert_eq!(a, vec![1, 2, 3]);§Special types
use scanner::{Scanner, scan};
let mut scanner = Scanner::cursor("5\n1 3\nabcde\nABCDE");
scan! {
via scanner,
n: usize,
(l, r): (Usize1, Usize1),
s: Chars,
t: Bytes,
};
assert_eq!((l, r), (0, 2));
assert_eq!(s, vec!['a', 'b', 'c', 'd', 'e']);
assert_eq!(t, vec![b'A', b'B', b'C', b'D', b'E']);