nd_vector 0.1.0

[WIP] Lengthen! Shrink! Iterate! Scale! Twist and turn to your imagination along any dimension on a vector!
Documentation
use std::{num::NonZeroUsize, ops::Range};

use crate::VectorGrid;



impl<ItemType> VectorGrid<ItemType> {
    pub fn cut(&mut self, dimension: usize, mut range: Range<usize>) {
        let old_step_size = (self.step_sizes()[dimension], self.step_sizes()[dimension + 1]);
        if !dimension == self.defined_shape.len() {
            self.defined_shape[dimension] = NonZeroUsize::new(self.defined_shape[dimension].get() - range.end - range.start).unwrap();
        }

        range.start *= old_step_size.0;
        range.end *= old_step_size.0;
        let cut_width = range.end - range.start;
        
        let mut i = 0;
        loop {
            let paste_index = i + range.start;
            let copy_index = range.end + i + (i / (old_step_size.1 - cut_width)) * cut_width;
            if copy_index >= self.items.len() {
                self.items.splice(paste_index.., []);
                return;
            }
            println!("swaping {} and {}", i + range.start, copy_index);
            self.items.swap(copy_index, paste_index);
            i += 1;
        }
    }
}