2 个版本

0.1.1 2022年5月17日
0.1.0 2022年5月17日

#1257 in Rust 模式

MIT/Apache

10KB
110

Axmac

1-4 维数据结构的可读索引宏。

问题

你是否曾尝试过这样索引集合

let point3d = [0.32, 1.2, 10.7];
let first = point3d[0];
let next  = point3d[1];
// ...

相信我,这会很快变得令人烦恼。

axmac crate 被设计用来解决你的索引问题。

基本用法

此 crate 提供了宏 ax!axs!axr!,这些宏将标识符 xyzw 转换为 usize 值。

ax! (axis)

将单个标识符转换为 usize

// Note:
assert_eq!(ax!(x), 0usize);
assert_eq!(ax!(y), 1);
assert_eq!(ax!(z), 2);
assert_eq!(ax!(w), 3);

let arr = ["a", "b", "c", "d"];
assert_eq!(arr[ax!(y)], "b");
assert_eq!(arr[ax!(z)], "c");

axr! (axis range)

将标识符范围和/或表达式转换为 usize 的范围

// Here are just a few of the variations
let range1 = axr!(x..=z);
let range2 = axr!(z..4);
let range3 = axr!((1)..z);

assert_eq!(range1, 0..=3);
assert_eq!(range2, 2..4);
assert_eq!(range3, 1..2);

let arr = ["a", "b", "c", "d"];
assert_eq!(arr[range1], ["a", "b", "c"]);
assert_eq!(arr[range2], ["c", "d"]);
assert_eq!(arr[range3], ["b"]);

axs! (axes)

将标识符数组转换为 usize 数组

let array = axs![x, y, x, w];
assert_eq!(array, [0, 1, 0, 3]);

let array = axs![z; 4];
assert_eq!(array, [2, 2, 2, 2]);

贡献

对代码库、文档、README(或任何东西)的任何建议都非常欢迎!

如果有任何问题或查询,请在我们的 Github 页面上提交一个问题。

许可

此 crate 可在 MIT 和/或 Apache2.0 许可证下使用。

无运行时依赖