libzstd-rs-sys 0.0.0

a rust implementation of zstd compression and decompression
Documentation
pub type HIST_checkInput_e = core::ffi::c_uint;
pub const checkMaxSymbolValue: HIST_checkInput_e = 1;
pub const trustInput: HIST_checkInput_e = 0;
use core::ptr;

use libc::size_t;

use crate::lib::common::error_private::{ERR_isError, Error};
use crate::lib::common::mem::MEM_read32;
pub const HIST_WKSP_SIZE_U32: core::ffi::c_int = 1024;
pub const HIST_WKSP_SIZE: size_t =
    (HIST_WKSP_SIZE_U32 as size_t).wrapping_mul(::core::mem::size_of::<core::ffi::c_uint>());
pub const HIST_FAST_THRESHOLD: core::ffi::c_int = 1500;
pub unsafe fn HIST_isError(code: size_t) -> core::ffi::c_uint {
    ERR_isError(code) as _
}
pub unsafe fn HIST_add(
    count: *mut core::ffi::c_uint,
    src: *const core::ffi::c_void,
    srcSize: size_t,
) {
    let mut ip = src as *const u8;
    let end = ip.add(srcSize);
    while ip < end {
        let fresh0 = ip;
        ip = ip.offset(1);
        let fresh1 = &mut (*count.offset(*fresh0 as isize));
        *fresh1 = (*fresh1).wrapping_add(1);
    }
}
pub unsafe fn HIST_count_simple(
    count: *mut core::ffi::c_uint,
    maxSymbolValuePtr: *mut core::ffi::c_uint,
    src: *const core::ffi::c_void,
    srcSize: size_t,
) -> core::ffi::c_uint {
    let mut ip = src as *const u8;
    let end = ip.add(srcSize);
    let mut maxSymbolValue = *maxSymbolValuePtr;
    let mut largestCount = 0;
    ptr::write_bytes(
        count as *mut u8,
        0,
        (maxSymbolValue.wrapping_add(1) as core::ffi::c_ulong)
            .wrapping_mul(::core::mem::size_of::<core::ffi::c_uint>() as core::ffi::c_ulong)
            as libc::size_t,
    );
    if srcSize == 0 {
        *maxSymbolValuePtr = 0;
        return 0;
    }
    while ip < end {
        let fresh2 = ip;
        ip = ip.offset(1);
        let fresh3 = &mut (*count.offset(*fresh2 as isize));
        *fresh3 = (*fresh3).wrapping_add(1);
    }
    while *count.offset(maxSymbolValue as isize) == 0 {
        maxSymbolValue = maxSymbolValue.wrapping_sub(1);
    }
    *maxSymbolValuePtr = maxSymbolValue;
    let mut s: u32 = 0;
    s = 0;
    while s <= maxSymbolValue {
        if *count.offset(s as isize) > largestCount {
            largestCount = *count.offset(s as isize);
        }
        s = s.wrapping_add(1);
    }
    largestCount
}
unsafe fn HIST_count_parallel_wksp(
    count: *mut core::ffi::c_uint,
    maxSymbolValuePtr: *mut core::ffi::c_uint,
    source: *const core::ffi::c_void,
    sourceSize: size_t,
    check: HIST_checkInput_e,
    workSpace: *mut u32,
) -> size_t {
    let mut ip = source as *const u8;
    let iend = ip.add(sourceSize);
    let countSize = ((*maxSymbolValuePtr).wrapping_add(1) as core::ffi::c_ulong)
        .wrapping_mul(::core::mem::size_of::<core::ffi::c_uint>() as core::ffi::c_ulong);
    let mut max = 0;
    let Counting1 = workSpace;
    let Counting2 = Counting1.offset(256);
    let Counting3 = Counting2.offset(256);
    let Counting4 = Counting3.offset(256);
    if sourceSize == 0 {
        ptr::write_bytes(count as *mut u8, 0, countSize as libc::size_t);
        *maxSymbolValuePtr = 0;
        return 0;
    }
    ptr::write_bytes(
        workSpace as *mut u8,
        0,
        ((4 * 256) as core::ffi::c_ulong)
            .wrapping_mul(::core::mem::size_of::<core::ffi::c_uint>() as core::ffi::c_ulong)
            as libc::size_t,
    );
    let mut cached = MEM_read32(ip as *const core::ffi::c_void);
    ip = ip.offset(4);
    while ip < iend.offset(-(15)) {
        let mut c = cached;
        cached = MEM_read32(ip as *const core::ffi::c_void);
        ip = ip.offset(4);
        let fresh4 = &mut (*Counting1.offset(c as u8 as isize));
        *fresh4 = (*fresh4).wrapping_add(1);
        let fresh5 = &mut (*Counting2.offset((c >> 8) as u8 as isize));
        *fresh5 = (*fresh5).wrapping_add(1);
        let fresh6 = &mut (*Counting3.offset((c >> 16) as u8 as isize));
        *fresh6 = (*fresh6).wrapping_add(1);
        let fresh7 = &mut (*Counting4.offset((c >> 24) as isize));
        *fresh7 = (*fresh7).wrapping_add(1);
        c = cached;
        cached = MEM_read32(ip as *const core::ffi::c_void);
        ip = ip.offset(4);
        let fresh8 = &mut (*Counting1.offset(c as u8 as isize));
        *fresh8 = (*fresh8).wrapping_add(1);
        let fresh9 = &mut (*Counting2.offset((c >> 8) as u8 as isize));
        *fresh9 = (*fresh9).wrapping_add(1);
        let fresh10 = &mut (*Counting3.offset((c >> 16) as u8 as isize));
        *fresh10 = (*fresh10).wrapping_add(1);
        let fresh11 = &mut (*Counting4.offset((c >> 24) as isize));
        *fresh11 = (*fresh11).wrapping_add(1);
        c = cached;
        cached = MEM_read32(ip as *const core::ffi::c_void);
        ip = ip.offset(4);
        let fresh12 = &mut (*Counting1.offset(c as u8 as isize));
        *fresh12 = (*fresh12).wrapping_add(1);
        let fresh13 = &mut (*Counting2.offset((c >> 8) as u8 as isize));
        *fresh13 = (*fresh13).wrapping_add(1);
        let fresh14 = &mut (*Counting3.offset((c >> 16) as u8 as isize));
        *fresh14 = (*fresh14).wrapping_add(1);
        let fresh15 = &mut (*Counting4.offset((c >> 24) as isize));
        *fresh15 = (*fresh15).wrapping_add(1);
        c = cached;
        cached = MEM_read32(ip as *const core::ffi::c_void);
        ip = ip.offset(4);
        let fresh16 = &mut (*Counting1.offset(c as u8 as isize));
        *fresh16 = (*fresh16).wrapping_add(1);
        let fresh17 = &mut (*Counting2.offset((c >> 8) as u8 as isize));
        *fresh17 = (*fresh17).wrapping_add(1);
        let fresh18 = &mut (*Counting3.offset((c >> 16) as u8 as isize));
        *fresh18 = (*fresh18).wrapping_add(1);
        let fresh19 = &mut (*Counting4.offset((c >> 24) as isize));
        *fresh19 = (*fresh19).wrapping_add(1);
    }
    ip = ip.offset(-(4));
    while ip < iend {
        let fresh20 = ip;
        ip = ip.offset(1);
        let fresh21 = &mut (*Counting1.offset(*fresh20 as isize));
        *fresh21 = (*fresh21).wrapping_add(1);
    }
    let mut s: u32 = 0;
    s = 0;
    while s < 256 {
        let fresh22 = &mut (*Counting1.offset(s as isize));
        *fresh22 = (*fresh22).wrapping_add(
            (*Counting2.offset(s as isize))
                .wrapping_add(*Counting3.offset(s as isize))
                .wrapping_add(*Counting4.offset(s as isize)),
        );
        if *Counting1.offset(s as isize) > max {
            max = *Counting1.offset(s as isize);
        }
        s = s.wrapping_add(1);
    }
    let mut maxSymbolValue = 255 as core::ffi::c_uint;
    while *Counting1.offset(maxSymbolValue as isize) == 0 {
        maxSymbolValue = maxSymbolValue.wrapping_sub(1);
    }
    if check as core::ffi::c_uint != 0 && maxSymbolValue > *maxSymbolValuePtr {
        return Error::maxSymbolValue_tooSmall.to_error_code();
    }
    *maxSymbolValuePtr = maxSymbolValue;
    libc::memmove(
        count as *mut core::ffi::c_void,
        Counting1 as *const core::ffi::c_void,
        countSize as libc::size_t,
    );
    max as size_t
}
pub unsafe fn HIST_countFast_wksp(
    count: *mut core::ffi::c_uint,
    maxSymbolValuePtr: *mut core::ffi::c_uint,
    source: *const core::ffi::c_void,
    sourceSize: size_t,
    workSpace: *mut core::ffi::c_void,
    workSpaceSize: size_t,
) -> size_t {
    if sourceSize < HIST_FAST_THRESHOLD as size_t {
        return HIST_count_simple(count, maxSymbolValuePtr, source, sourceSize) as size_t;
    }
    if workSpace as size_t & 3 != 0 {
        return Error::GENERIC.to_error_code();
    }
    if workSpaceSize < HIST_WKSP_SIZE {
        return Error::workSpace_tooSmall.to_error_code();
    }
    HIST_count_parallel_wksp(
        count,
        maxSymbolValuePtr,
        source,
        sourceSize,
        trustInput,
        workSpace as *mut u32,
    )
}
pub unsafe fn HIST_count_wksp(
    count: *mut core::ffi::c_uint,
    maxSymbolValuePtr: *mut core::ffi::c_uint,
    source: *const core::ffi::c_void,
    sourceSize: size_t,
    workSpace: *mut core::ffi::c_void,
    workSpaceSize: size_t,
) -> size_t {
    if workSpace as size_t & 3 != 0 {
        return Error::GENERIC.to_error_code();
    }
    if workSpaceSize < HIST_WKSP_SIZE {
        return Error::workSpace_tooSmall.to_error_code();
    }
    if *maxSymbolValuePtr < 255 {
        return HIST_count_parallel_wksp(
            count,
            maxSymbolValuePtr,
            source,
            sourceSize,
            checkMaxSymbolValue,
            workSpace as *mut u32,
        );
    }
    *maxSymbolValuePtr = 255;
    HIST_countFast_wksp(
        count,
        maxSymbolValuePtr,
        source,
        sourceSize,
        workSpace,
        workSpaceSize,
    )
}
pub unsafe fn HIST_countFast(
    count: *mut core::ffi::c_uint,
    maxSymbolValuePtr: *mut core::ffi::c_uint,
    source: *const core::ffi::c_void,
    sourceSize: size_t,
) -> size_t {
    let mut tmpCounters: [core::ffi::c_uint; 1024] = [0; 1024];
    HIST_countFast_wksp(
        count,
        maxSymbolValuePtr,
        source,
        sourceSize,
        tmpCounters.as_mut_ptr() as *mut core::ffi::c_void,
        ::core::mem::size_of::<[core::ffi::c_uint; 1024]>(),
    )
}
pub unsafe fn HIST_count(
    count: *mut core::ffi::c_uint,
    maxSymbolValuePtr: *mut core::ffi::c_uint,
    src: *const core::ffi::c_void,
    srcSize: size_t,
) -> size_t {
    let mut tmpCounters: [core::ffi::c_uint; 1024] = [0; 1024];
    HIST_count_wksp(
        count,
        maxSymbolValuePtr,
        src,
        srcSize,
        tmpCounters.as_mut_ptr() as *mut core::ffi::c_void,
        ::core::mem::size_of::<[core::ffi::c_uint; 1024]>(),
    )
}