libzstd-rs-sys 0.0.0

a rust implementation of zstd compression and decompression
Documentation
use core::ffi::{c_uint, c_void};
use core::mem;

use libc::size_t;

#[inline]
pub(crate) fn MEM_32bits() -> c_uint {
    (::core::mem::size_of::<usize>() == 4) as _
}
#[inline]
pub(crate) fn MEM_64bits() -> c_uint {
    (::core::mem::size_of::<usize>() == 8) as _
}

#[inline]
pub(crate) fn MEM_isLittleEndian() -> c_uint {
    cfg!(target_endian = "little") as _
}

#[inline]
pub(crate) unsafe fn MEM_read16(ptr: *const c_void) -> u16 {
    ptr.cast::<u16>().read_unaligned()
}
#[inline]
pub(crate) unsafe fn MEM_read32(ptr: *const c_void) -> u32 {
    ptr.cast::<u32>().read_unaligned()
}
#[inline]
pub(crate) unsafe fn MEM_read64(ptr: *const c_void) -> u64 {
    ptr.cast::<u64>().read_unaligned()
}
#[inline]
pub(crate) unsafe fn MEM_readST(ptr: *const c_void) -> size_t {
    ptr.cast::<usize>().read_unaligned()
}

#[inline]
pub(crate) unsafe fn MEM_write16(memPtr: *mut c_void, value: u16) {
    memPtr.cast::<u16>().write_unaligned(value)
}
#[inline]
pub(crate) unsafe fn MEM_write32(memPtr: *mut c_void, value: u32) {
    memPtr.cast::<u32>().write_unaligned(value)
}
#[inline]
pub(crate) unsafe fn MEM_write64(memPtr: *mut c_void, value: u64) {
    memPtr.cast::<u64>().write_unaligned(value)
}

#[inline]
pub(crate) fn MEM_swap16(in_0: u16) -> u16 {
    in_0.swap_bytes()
}
#[inline]
pub(crate) fn MEM_swap32(in_0: u32) -> u32 {
    in_0.swap_bytes()
}
#[inline]
pub(crate) fn MEM_swap64(in_0: u64) -> u64 {
    in_0.swap_bytes()
}

#[inline]
pub(crate) unsafe fn MEM_readLE16(memPtr: *const c_void) -> u16 {
    if cfg!(target_endian = "little") {
        MEM_read16(memPtr)
    } else {
        let p = memPtr as *const u8;
        (*p.offset(0) as core::ffi::c_int + ((*p.offset(1) as core::ffi::c_int) << 8)) as u16
    }
}

#[inline]
pub(crate) unsafe fn MEM_writeLE16(memPtr: *mut c_void, val32: u16) {
    if cfg!(target_endian = "little") {
        MEM_write16(memPtr, val32);
    } else {
        MEM_write16(memPtr, MEM_swap16(val32));
    };
}

#[inline]
pub unsafe fn MEM_readLE24(memPtr: *const c_void) -> u32 {
    (MEM_readLE16(memPtr) as u32).wrapping_add((*(memPtr as *const u8).offset(2) as u32) << 16)
}

#[inline]
pub(crate) unsafe fn MEM_writeLE24(memPtr: *mut c_void, val: u32) {
    MEM_writeLE16(memPtr, val as u16);
    *(memPtr as *mut u8).offset(2) = (val >> 16) as u8;
}

#[inline]
pub unsafe fn MEM_readLE32(memPtr: *const c_void) -> u32 {
    if cfg!(target_endian = "little") {
        MEM_read32(memPtr)
    } else {
        MEM_swap32(MEM_read32(memPtr))
    }
}

#[inline]
pub(crate) unsafe fn MEM_writeLE32(memPtr: *mut c_void, val32: u32) {
    if cfg!(target_endian = "little") {
        MEM_write32(memPtr, val32);
    } else {
        MEM_write32(memPtr, MEM_swap32(val32));
    };
}

#[inline]
pub(crate) unsafe fn MEM_readLE64(memPtr: *const c_void) -> u64 {
    if cfg!(target_endian = "little") {
        MEM_read64(memPtr)
    } else {
        MEM_swap64(MEM_read64(memPtr))
    }
}

#[inline]
pub(crate) unsafe fn MEM_writeLE64(memPtr: *mut c_void, val64: u64) {
    if cfg!(target_endian = "little") {
        MEM_write64(memPtr, val64);
    } else {
        MEM_write64(memPtr, MEM_swap64(val64));
    };
}

#[inline]
pub(crate) unsafe fn MEM_readLEST(memPtr: *const c_void) -> size_t {
    match mem::size_of::<size_t>() {
        4 => MEM_readLE32(memPtr) as size_t,
        8 => MEM_readLE64(memPtr) as size_t,
        _ => unreachable!(),
    }
}

#[inline]
pub(crate) unsafe fn MEM_writeLEST(memPtr: *mut c_void, val: size_t) {
    match mem::size_of::<size_t>() {
        4 => MEM_writeLE32(memPtr, val as u32),
        8 => MEM_writeLE64(memPtr, val as u64),
        _ => unreachable!(),
    }
}

const _: () = {
    assert!(mem::size_of::<size_t>() == 4 || mem::size_of::<size_t>() == 8);
};