1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// SPDX-License-Identifier: CC0-1.0

//! Frame related FFI bindings and data structures

use std::os::raw::c_uchar;

use libc::size_t;

/// FrameItem for C FFI.
/// This type is only used to pass data to the C FFI.
#[derive(Debug)]
#[repr(C)]
pub struct CFrameItem {
    pub edge: *const c_uchar,
    pub len: size_t,
}

extern "C" {
    pub static c_sizeof_frameItem: size_t;

    pub static c_alignof_frameItem: size_t;

    pub(crate) fn c_initWriteFrame(frame: &mut CFrameItem, n: size_t, from: *const size_t);
    pub(crate) fn c_initReadFrame(frame: &mut CFrameItem, n: size_t, from: *const size_t);

    pub fn c_readBit(frame: &mut CFrameItem) -> bool;
    pub fn c_writeBit(frame: &mut CFrameItem, bit: bool);
    pub fn c_forwardBits(frame: &mut CFrameItem, n: usize);
    pub fn c_skipBits(frame: &mut CFrameItem, n: usize);
}