From 17734cdcbf8ea30ded09a0b14372d92c11d1cc8c Mon Sep 17 00:00:00 2001 From: mat Date: Wed, 4 Oct 2023 20:24:49 -0500 Subject: [PATCH] add safety comments and simplify some code --- azalea-core/src/bitset.rs | 2 ++ azalea-core/src/position.rs | 11 +---------- azalea/src/pathfinder/moves/mod.rs | 2 ++ 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/azalea-core/src/bitset.rs b/azalea-core/src/bitset.rs index b7a426c9..912216a8 100755 --- a/azalea-core/src/bitset.rs +++ b/azalea-core/src/bitset.rs @@ -143,10 +143,12 @@ where } } + #[inline] pub fn index(&self, index: usize) -> bool { (self.data[index / 8] & (1u8 << (index % 8))) != 0 } + #[inline] pub fn set(&mut self, bit_index: usize) { self.data[bit_index / 8] |= 1u8 << (bit_index % 8); } diff --git a/azalea-core/src/position.rs b/azalea-core/src/position.rs index b731384b..e1993b18 100755 --- a/azalea-core/src/position.rs +++ b/azalea-core/src/position.rs @@ -261,7 +261,6 @@ impl ChunkSectionPos { } /// The coordinates of a block inside a chunk. #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] -#[repr(align(8))] pub struct ChunkBlockPos { pub x: u8, pub y: i32, @@ -300,7 +299,6 @@ impl nohash_hasher::IsEnabled for ChunkBlockPos {} /// The coordinates of a block inside a chunk section. Each coordinate must be /// in the range [0, 15]. #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] -#[repr(align(4))] pub struct ChunkSectionBlockPos { pub x: u8, pub y: u8, @@ -330,14 +328,7 @@ impl Hash for ChunkSectionBlockPos { impl From for u16 { #[inline] fn from(pos: ChunkSectionBlockPos) -> Self { - let mut val: u16 = 0; - // first 4 bits are z - val |= pos.z as u16; - // next 4 bits are y - val |= (pos.y as u16) << 4; - // last 4 bits are x - val |= (pos.x as u16) << 8; - val + (pos.z as u16) | ((pos.y as u16) << 4) | ((pos.x as u16) << 8) } } impl nohash_hasher::IsEnabled for ChunkSectionBlockPos {} diff --git a/azalea/src/pathfinder/moves/mod.rs b/azalea/src/pathfinder/moves/mod.rs index 69145eeb..90109346 100644 --- a/azalea/src/pathfinder/moves/mod.rs +++ b/azalea/src/pathfinder/moves/mod.rs @@ -131,6 +131,7 @@ impl PathfinderCtx { let (section_pos, section_block_pos) = (ChunkSectionPos::from(pos), ChunkSectionBlockPos::from(pos)); let index = u16::from(section_block_pos) as usize; + // SAFETY: we're only accessing this from one thread let cached_block_passable = unsafe { &mut *self.cached_block_passable.get() }; if let Some(cached) = cached_block_passable.iter_mut().find_map(|cached| { if cached.pos == section_pos { @@ -183,6 +184,7 @@ impl PathfinderCtx { let (section_pos, section_block_pos) = (ChunkSectionPos::from(pos), ChunkSectionBlockPos::from(pos)); let index = u16::from(section_block_pos) as usize; + // SAFETY: we're only accessing this from one thread let cached_block_solid = unsafe { &mut *self.cached_block_solid.get() }; if let Some(cached) = cached_block_solid.iter_mut().find_map(|cached| { if cached.pos == section_pos {