scan

Macro scan 

Source
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 to Vec<char>
  • Bytes: Reads a string and converts it to Vec<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']);