#![allow(non_camel_case_types, non_snake_case)]
use crate::decl::*;
use crate::guard::*;
use crate::kernel::privs::*;
use crate::user::ffi;
handle! { HACCEL;
}
impl HACCEL {
#[must_use]
pub fn CreateAcceleratorTable(accel: &[ACCEL]) -> SysResult<DestroyAcceleratorTableGuard> {
let hg_buf = HGLOBAL::GlobalAlloc(
crate::co::GMEM::ZEROINIT,
std::mem::size_of::<ACCEL>() * accel.len(),
)?;
{
let sli =
unsafe { std::slice::from_raw_parts_mut(hg_buf.ptr() as *mut ACCEL, accel.len()) };
sli.iter_mut()
.zip(accel.iter())
.for_each(|(buf2, src)| *buf2 = *src);
}
unsafe {
PtrRet(ffi::CreateAcceleratorTableW(hg_buf.ptr(), accel.len() as _))
.to_sysresult_handle()
.map(|h| DestroyAcceleratorTableGuard::new(h))
}
}
}