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;
}
}
}