pub struct array_and_size {
values: int64_t,
size: int32_t,
}
, . , values, - *mut int32_t.
, , C-, C "" ad-hoc , . API C
int32_t rle_values_size(RLE *rle);
int32_t *rle_values(RLE *rle);
(: , , , , , C).
Rust :
extern "C" fn rle_values_size(rle: *mut RLE) -> int32_t
extern "C" fn rle_values(rle: *mut RLE) -> *mut int32_t
size , ,
extern "C" fn rle_values(rle: *mut RLE) -> *mut int32_t {
unsafe { &mut (*rle).values[0] }
}
Vec, C.
, C , C , ,
extern "C" fn rle_values_buf(rle: *mut RLE, buf: *mut int32_t, len: int32_t) {
use std::{slice,ptr}
unsafe {
if len > (*rle).values.len() {
len = (*rle).values.len()
}
ptr::copy_nonoverlapping(&(*rle).values[0], buf, len as usize);
}
}
C
void rle_values_buf(RLE *rle, int32_t *buf, int32_t len);
() C- , C . ( , , ).
, "" C, mem::forget , C , , , .
C, *mut i32, i32, . from_raw_parts, to_vec , , Rust. , , from_raw_parts.
, , , . undefined, (, , GDB).