axmac

Crates.ioaxmac
lib.rsaxmac
version0.1.1
sourcesrc
created_at2022-05-17 02:23:27.405601
updated_at2022-05-17 02:25:06.557114
descriptionReadable indexing macros for 1-4 dimensional data structures
homepage
repositoryhttps://github.com/taennan/axmac
max_upload_size
id588101
size20,737
(taennan)

documentation

README

Axmac

Readable indexing macros for 1-4 dimensional data structures.

The Problem

Have you ever tried to index collections like so:

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

Trust me, it gets annoying quickly.

The axmac crate was designed to be a solution to your indexing problems.

Basic Usage

This crate provides the macros ax!, axs! and axr! which transform the identifiers x, y, z and w into usize values.

ax! (axis)

Converts a single identifier into a usize value

// 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)

Converts a range of identifiers and/or expressions into a range of usize's

// 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)

Converts an array of identifiers into an array of usize's

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]);

Contributing

Any suggestions for the codebase, documentation, README (or anything) are more than welcome!

If there are any problems or queries, please submit an issue on our Github page.

License

This crate is available under the MIT and/or Apache2.0 licenses.

Commit count: 9

cargo fmt