chj_util/
warn.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//! Printing statements to stderr for debugging purposes

#[macro_export]
macro_rules! pp {
    ($namestr:expr, $val:expr) => {{
        let res = $val;
        eprintln!("{}: {:?}", $namestr, res);
        res
    }}
}

#[macro_export]
macro_rules! nopp {
    ($namestr:expr, $arg:expr) => {
        $arg
    }
}


#[macro_export]
macro_rules! warn {
    ($formatstr:expr $(,$arg:expr)*) => { {
        use std::io::Write;
        let mut outp = std::io::BufWriter::new(std::io::stderr().lock());
        let _ = write!(&mut outp, "W: ");
        let _ = write!(&mut outp, $formatstr $(,$arg)*);
        let _ = writeln!(&mut outp, " at {:?} line {}", file!(), line!());
        let _ = outp.flush();
    } }
}

#[macro_export]
macro_rules! nowarn {
    ($formatstr:expr $(,$arg:expr)*) => {
    }
}

/// Requires a `pub static DO_WARN_THREAD: AtomicBool =
/// AtomicBool::new(false);` in the scope, which can be changed via
/// `...::DO_WARN_THREAD.store(true,
/// std::sync::atomic::Ordering::SeqCst);`.
#[macro_export]
macro_rules! warn_thread {
    { $fmt:expr $(,$arg:expr)* } => {
        if DO_WARN_THREAD.load(std::sync::atomic::Ordering::SeqCst) {
            use std::io::Write;
            let mut outp = std::io::BufWriter::new(std::io::stderr().lock());
            let _ = write!(&mut outp, "{:?} W: ", std::thread::current().id());
            let _ = write!(&mut outp, $fmt $(,$arg)*);
            let _ = writeln!(&mut outp, " at {:?} line {}", file!(), line!());
            let _ = outp.flush();
        }
    }
}

#[macro_export]
macro_rules! nowarn_thread {
    ($formatstr:expr $(,$arg:expr)*) => {
    }
}


#[macro_export]
macro_rules! warn_todo {
    ($formatstr:expr $(,$arg:expr)*) => {
        use std::io::Write;
        let mut outp = std::io::BufWriter::new(std::io::stderr().lock());
        let _ = write!(&mut outp, "Todo: ");
        let _ = write!(&mut outp, $formatstr, $(,$arg)*);
        let _ = writeln!(&mut outp, " at {:?} line {}", file!(), line!());
        let _ = outp.flush();
    }
}

#[macro_export]
macro_rules! nowarn_todo {
    ($formatstr:expr $(,$arg:expr)*) => {
    }
}