# Axmac Readable indexing macros for 1-4 dimensional data structures. ### The Problem Have you ever tried to index collections like so: ```rust 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 ```rust // 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 ```rust // 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 ```rust 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.