/// Safely evaluates the pointer chain.
/// Relies on `ReadProcessMemory` instead of pointer dereferencing for crash
/// safety.  Returns `None` if the evaluation failed.
Safely evaluates the pointer chain.
Relies on `ReadProcessMemory` instead of pointer dereferencing for crash
safety.  Returns `None` if the evaluation failed.
Safely evaluates the pointer chain . Relies on ` ReadProcessMemory ` instead of pointer dereferencing for crash safety . Returns ` None ` if the evaluation failed .
pub fn eval(&self) -> Option<*mut T> {
    self
      .offsets
      .iter()
      .fold(Some(self.base as usize), |addr, &offs| {
        if let Some(addr) = addr {
          // Some(unsafe { std::ptr::read::<*const u8>(addr as _).offset(*offs as isize) })
          self.safe_read(addr, offs)
        } else {
          None
        }
      })
      .map(|addr| addr as *mut T)
    // .and_then(|addr| Some(addr as *mut T))
  }
pub fn eval ( & self ) -> Option < * mut T > { self . offsets . iter ( ) . fold ( Some ( self . base as usize ) , | addr , & offs | { if let Some ( addr ) = addr { // Some(unsafe { std::ptr::read::<*const u8>(addr as _).offset(*offs as isize) }) self . safe_read ( addr , offs ) } else { None } } ) . map ( | addr | addr as * mut T ) // .and_then(|addr| Some(addr as *mut T)) }
Safely evaluates the pointer chain.
Safely evaluates the pointer chain .
&self