#![allow(non_camel_case_types)]
use crate::rubysys::types::{c_int, c_void, size_t, Value};
pub const RB_IO_BUFFER_EXTERNAL: rb_io_buffer_flags = 1;
pub const RB_IO_BUFFER_INTERNAL: rb_io_buffer_flags = 2;
pub const RB_IO_BUFFER_MAPPED: rb_io_buffer_flags = 4;
#[cfg(ruby_gte_3_2)]
pub const RB_IO_BUFFER_SHARED: rb_io_buffer_flags = 8;
pub const RB_IO_BUFFER_LOCKED: rb_io_buffer_flags = 32;
pub const RB_IO_BUFFER_PRIVATE: rb_io_buffer_flags = 64;
pub const RB_IO_BUFFER_READONLY: rb_io_buffer_flags = 128;
#[cfg(ruby_gte_3_3)]
pub const RB_IO_BUFFER_FILE: rb_io_buffer_flags = 256;
pub const RB_IO_BUFFER_LITTLE_ENDIAN: c_int = 4;
pub const RB_IO_BUFFER_BIG_ENDIAN: c_int = 8;
#[cfg(target_endian = "little")]
pub const RB_IO_BUFFER_HOST_ENDIAN: c_int = RB_IO_BUFFER_LITTLE_ENDIAN;
#[cfg(target_endian = "big")]
pub const RB_IO_BUFFER_HOST_ENDIAN: c_int = RB_IO_BUFFER_BIG_ENDIAN;
pub const RB_IO_BUFFER_NETWORK_ENDIAN: c_int = RB_IO_BUFFER_BIG_ENDIAN;
pub type rb_io_buffer_flags = c_int;
pub type rb_off_t = i64;
#[cfg_attr(rutie_dllimport, link(name = "rutie_ruby"))]
extern "C" {
pub static rb_cIOBuffer: Value;
pub static RUBY_IO_BUFFER_PAGE_SIZE: size_t;
pub static RUBY_IO_BUFFER_DEFAULT_SIZE: size_t;
}
#[cfg_attr(rutie_dllimport, link(name = "rutie_ruby"))]
extern "C" {
pub fn rb_io_buffer_new(base: *mut c_void, size: size_t, flags: rb_io_buffer_flags) -> Value;
pub fn rb_io_buffer_map(
io: Value,
size: size_t,
offset: rb_off_t,
flags: rb_io_buffer_flags,
) -> Value;
pub fn rb_io_buffer_lock(buffer: Value) -> Value;
pub fn rb_io_buffer_unlock(buffer: Value) -> Value;
pub fn rb_io_buffer_try_unlock(buffer: Value) -> c_int;
pub fn rb_io_buffer_free(buffer: Value) -> Value;
#[cfg(ruby_gte_3_3)]
pub fn rb_io_buffer_free_locked(buffer: Value) -> Value;
pub fn rb_io_buffer_get_bytes(
buffer: Value,
base: *mut *mut c_void,
size: *mut size_t,
) -> rb_io_buffer_flags;
pub fn rb_io_buffer_get_bytes_for_reading(
buffer: Value,
base: *mut *const c_void,
size: *mut size_t,
);
pub fn rb_io_buffer_get_bytes_for_writing(
buffer: Value,
base: *mut *mut c_void,
size: *mut size_t,
);
pub fn rb_io_buffer_transfer(buffer: Value) -> Value;
pub fn rb_io_buffer_resize(buffer: Value, size: size_t);
pub fn rb_io_buffer_clear(buffer: Value, value: u8, offset: size_t, length: size_t);
}
#[cfg(ruby_3_1)]
#[cfg_attr(rutie_dllimport, link(name = "rutie_ruby"))]
extern "C" {
pub fn rb_io_buffer_read(buffer: Value, io: Value, length: size_t) -> Value;
pub fn rb_io_buffer_pread(buffer: Value, io: Value, length: size_t, offset: rb_off_t) -> Value;
pub fn rb_io_buffer_write(buffer: Value, io: Value, length: size_t) -> Value;
pub fn rb_io_buffer_pwrite(buffer: Value, io: Value, length: size_t, offset: rb_off_t)
-> Value;
}
#[cfg(ruby_gte_3_2)]
#[cfg_attr(rutie_dllimport, link(name = "rutie_ruby"))]
extern "C" {
pub fn rb_io_buffer_read(buffer: Value, io: Value, length: size_t, offset: size_t) -> Value;
pub fn rb_io_buffer_pread(
buffer: Value,
io: Value,
from: rb_off_t,
length: size_t,
offset: size_t,
) -> Value;
pub fn rb_io_buffer_write(buffer: Value, io: Value, length: size_t, offset: size_t) -> Value;
pub fn rb_io_buffer_pwrite(
buffer: Value,
io: Value,
from: rb_off_t,
length: size_t,
offset: size_t,
) -> Value;
}