#count #macro #编译时 #过程

count-macro

一个简单的Rust宏,用于编译时计数

6个版本

新增 0.2.3 2024年8月22日
0.2.2 2022年5月21日
0.2.1 2022年2月22日
0.1.1 2022年1月9日

72#count

Download history 8/week @ 2024-04-29 10/week @ 2024-05-06 16/week @ 2024-05-13 41/week @ 2024-05-20 43/week @ 2024-05-27 74/week @ 2024-06-03 17/week @ 2024-06-10 63/week @ 2024-06-17 23/week @ 2024-06-24 28/week @ 2024-07-08 19/week @ 2024-07-15 51/week @ 2024-07-22 24/week @ 2024-07-29 14/week @ 2024-08-05 24/week @ 2024-08-12

每月115次下载
2 个crate中使用(通过 bool_vec

MIT 协议

10KB
107

计数宏

一个允许编译时计数的宏

如何使用

_int_ 的每个实例都将被替换为一个字面量或一个标识符。

在调试模式下,如果计数器超过 usize,count_macro::count 将会panic。

如果您希望回绕到0,请使用 count_macro::wrapping_count

示例

标识符到字面量

use count_macro::count;

let a = count!(vec![_int_, _int_, _int_]);
assert_eq!(a, vec![0, 1, 2]);

标识符到标识符

use count_macro::count;

count! {
    let a_int_ = "Hello";
    let a_int_ = "World";
}

assert_eq!(a0, "Hello");
assert_eq!(a1, "World");

在宏中

use count_macro::count;

macro_rules! my_macro {
    ($($v:expr),*) => {
        count!{
            $(
                let _ = $v; // Ignoring $v

                println!("{}", _int_);
            )*
        }
    };
}

my_macro!('@', '@', '@', '@'); // Will print from 0 to 3

多个计数器

使用 _int_countername_,您将能够创建一个名为 "countername" 的新计数器。

这不会通过 _int_ 或任何其他计数器(如 _int_0__int_x_)增加。

use count_macro::count;

// With two different counters
// _int_ does not increment _int_name_
count! {
    let a_int_ = _int_name_;
    let a_int_ = _int_name_;
    let a_int_ = _int_name_;
}

assert_eq!(a0, 0);
assert_eq!(a1, 1);
assert_eq!(a2, 2);

依赖项

~2.2–3MB
~54K SLoC