我使用FFI从其他地方访问数据。我的FFI API返回指向C API分配和拥有的数据的指针。我没有选择让C实现使用Rust分配的内存。
在实施我的API时,我想创建一个Iterator
,每&[u8]
生成一个next()
,但每次调用next()
时都会发现&[u8]
{前一次调用next()
生成的{1}}无效。
这是我的C API:
extern {
// open an iterator, return a "ctx" void*
fn read_open() -> *mut libc::c_void;
// read the next value of the iterator. The return value is
// invalidated when read_next or read_free is called
fn read_next(ctx : *mut libc::c_void, data_len : *mut libc::size_t) -> *const libc::void_t;
fn read_free(ctx : *mut libc::c_void);
}
如何围绕此API创建一个安全的Rusty包装器,以便read_next
返回的数据不需要复制?我希望对象是Iterator
- 能够。