PointND
A simple and flexible data structure for modelling points on an axis
Basic Usage
Constructing a Point
No matter how a PointND is constructed, the second generic arg must be filled with the number of dimensions it needs to have
If a point of zero dimensions is constructed, it will panic
use PointND;
// Creates a 2D point from values of a given vector or array
let vec: = vec!;
let p: = from;
// Creates a 3D point with all values set to 5
// When using this function, complete type annotation is necessary
let p: = fill;
// ERROR: Can't create a point with zero dimensions
// let p: PointND<_, 0> = PointND::fill(9);
// If you don't like writing PointND twice, use this syntax instead
// Note: The second generic must still be specified
let p = from;
Accessing Values
It is recommended to use the convenience getters if the dimensions of the point are from 1..=4
use PointND;
// A 2D point
let arr: = ;
let p: = from;
// As the point has 2 dimensions, we can access it's values with the x() and y() methods
let x: &i32 = p.x;
let y = p.y;
assert_eq!;
// If the point had 3 dimensions, we could use the above and:
// let z = p.z();
// Or 4:
// ...
// let w = p.w();
Otherwise indexing or the get() method can be used
use PointND;
let arr: = ;
let p: = from;
// Safely getting
// Returns None if index is out of bounds
let x: = p.get;
assert_eq!;
// Unsafely indexing
// If the index is out of bounds, this will panic
// Note that unlike other accessing methods, this will return a copy of the value
let y: i32 = p;
assert_eq!;
Querying Size
The number of dimensions can be retrieved using the dims() method (short for dimensions)
use PointND;
let p: = fill;
assert_eq!;
Contributing
Any suggestions for the codebase, documentation, README (or anything) are more than welcome!