#![allow(unused_imports, non_snake_case)]
use std::ffi::{c_uchar, c_ulong, c_ushort};
#[macro_export]
macro_rules! DEFINE_GUID {
(
$name:ident, $l:expr, $w1:expr, $w2:expr,
$b1:expr, $b2:expr, $b3:expr, $b4:expr, $b5:expr, $b6:expr, $b7:expr, $b8:expr
) => {
pub const $name: GUID = GUID { Data1: $l, Data2: $w1, Data3: $w2, Data4: [$b1, $b2, $b3, $b4, $b5, $b6, $b7, $b8] };
};
}
#[repr(C)]
#[derive(Copy)]
pub struct GUID {
pub Data1: c_ulong,
pub Data2: c_ushort,
pub Data3: c_ushort,
pub Data4: [c_uchar; 8],
}
impl Clone for GUID {
#[inline]
fn clone(&self) -> GUID {
*self
}
}
pub type LPGUID = *mut GUID;
pub type LPCGUID = *const GUID;
pub type IID = GUID;
pub type LPIID = *mut IID;
pub use self::IsEqualGUID as IsEqualIID;
pub type CLSID = GUID;
pub type LPCLSID = *mut CLSID;
pub use self::IsEqualGUID as IsEqualCLSID;
pub type FMTID = GUID;
pub type LPFMTID = *mut FMTID;
pub use self::IsEqualGUID as IsEqualFMTID;
pub type REFGUID = *const GUID;
pub type REFIID = *const IID;
pub type REFCLSID = *const IID;
pub type REFFMTID = *const IID;
DEFINE_GUID! {IID_NULL,
0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
#[inline]
pub fn IsEqualGUID(g1: &GUID, g2: &GUID) -> bool {
let a = unsafe { &*(g1 as *const _ as *const [u32; 4]) };
let b = unsafe { &*(g2 as *const _ as *const [u32; 4]) };
a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3]
}