如何在每次调用`next`时创建一个使先前结果无效的迭代器?

时间:2017-01-24 19:55:09

标签: rust borrow-checker

我使用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 - 能够。

0 个答案:

没有答案