replace common index code

This commit is contained in:
Simon Gardling 2025-03-27 14:37:36 -04:00
parent d1f515b17d
commit a8fc644d6c
Signed by: titaniumtown
GPG Key ID: 9AB28AC10ECE533D
3 changed files with 12 additions and 9 deletions

View File

@ -16,10 +16,7 @@ impl Buf {
// Truncate x and y and return a corresponding index into the data slice. // Truncate x and y and return a corresponding index into the data slice.
const fn index(&self, x: f32, y: f32) -> usize { const fn index(&self, x: f32, y: f32) -> usize {
// x/y can come in negative, hence we shift them by width/height. crate::util::index(self.width, self.height, x, y)
let i = (x + self.width as f32) as usize & (self.width - 1);
let j = (y + self.height as f32) as usize & (self.height - 1);
j * self.width + i
} }
// Get the buffer value at a given position. The implementation effectively treats data as periodic, hence any finite position will produce a value. // Get the buffer value at a given position. The implementation effectively treats data as periodic, hence any finite position will produce a value.

View File

@ -78,11 +78,8 @@ impl Grid {
} }
// Truncate x and y and return a corresponding index into the data slice. // Truncate x and y and return a corresponding index into the data slice.
fn index(&self, x: f32, y: f32) -> usize { const fn index(&self, x: f32, y: f32) -> usize {
// x/y can come in negative, hence we shift them by width/height. crate::util::index(self.width, self.height, x, y)
let i = (x + self.width as f32) as usize & (self.width - 1);
let j = (y + self.height as f32) as usize & (self.height - 1);
j * self.width + i
} }
// Add a value to the grid data at a given position. // Add a value to the grid data at a given position.

View File

@ -2,3 +2,12 @@
pub fn wrap(x: f32, max: f32) -> f32 { pub fn wrap(x: f32, max: f32) -> f32 {
x - max * ((x > max) as i32 as f32 - (x < 0.0_f32) as i32 as f32) x - max * ((x > max) as i32 as f32 - (x < 0.0_f32) as i32 as f32)
} }
// Truncate x and y and return a corresponding index into the data slice.
#[inline]
pub const fn index(width: usize, height: usize, x: f32, y: f32) -> usize {
// x/y can come in negative, hence we shift them by width/height.
let i = (x + width as f32) as usize & (width - 1);
let j = (y + height as f32) as usize & (height - 1);
j * width + i
}