hash as unsafe bytes
This commit is contained in:
		
							parent
							
								
									3ebfa35fa3
								
							
						
					
					
						commit
						47610129ff
					
				
							
								
								
									
										18
									
								
								src/azul.rs
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								src/azul.rs
									
									
									
									
									
								
							@ -1,4 +1,4 @@
 | 
			
		||||
use std::{hash::Hash, ops::{Deref, DerefMut}};
 | 
			
		||||
use std::{hash::{Hash, Hasher}, ops::{Deref, DerefMut}};
 | 
			
		||||
use rand::prelude::*;
 | 
			
		||||
use rand::distributions::WeightedIndex;
 | 
			
		||||
//use smallvec::{SmallVec, smallvec};
 | 
			
		||||
@ -402,8 +402,8 @@ impl Board {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//#[repr(align(16))]
 | 
			
		||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
 | 
			
		||||
#[repr(packed)]
 | 
			
		||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
 | 
			
		||||
pub struct Game {
 | 
			
		||||
    turn: u32,
 | 
			
		||||
    player: u8,
 | 
			
		||||
@ -660,6 +660,18 @@ impl Game {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsafe fn any_as_u8_slice<T: Sized>(p: &T) -> &[u8] {
 | 
			
		||||
    ::std::slice::from_raw_parts(
 | 
			
		||||
        (p as *const T) as *const u8,
 | 
			
		||||
        ::std::mem::size_of::<T>(),
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
impl Hash for Game {
 | 
			
		||||
    fn hash<H: Hasher>(&self, state: &mut H) {
 | 
			
		||||
        unsafe{any_as_u8_slice(self).deref().hash(state)}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Tests
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -91,7 +91,7 @@ fn calculate_options() -> Result<(), &'static str> {
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cached(size=45_000_000, key = "Game", convert = r#"{ _game }"#)]
 | 
			
		||||
#[cached(size=10_000_000, key = "Game", convert = r#"{ _game }"#)]
 | 
			
		||||
fn count_options(_game: Game, depth: u8, treshold: u8) -> u128 {
 | 
			
		||||
    let before = std::time::Instant::now();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user