package ru.serce.jnrfuse.struct;
import jnr.ffi.*;
import jnr.ffi.Runtime;
/**
* Data buffer vector
* <p>
* An array of data buffers, each containing a memory pointer or a
* file descriptor.
* <p>
* Allocate dynamically to add more than one buffer.
*
* @author Sergey Tselovalnikov
* @since 02.06.15
*/
public class FuseBufvec extends BaseStruct {
public FuseBufvec(jnr.ffi.Runtime runtime) {
super(runtime);
}
/**
* Number of buffers in the array
*/
public final size_t count = new size_t();
/**
* Index of current buffer within the array
*/
public final size_t idx = new size_t();
/**
* Current offset within the current buffer
*/
public final size_t off = new size_t();
/**
* Array of buffers
*/
public final FuseBuf buf = inner(new FuseBuf(getRuntime()));
public static FuseBufvec of(jnr.ffi.Pointer pointer) {
FuseBufvec buf = new FuseBufvec(jnr.ffi.Runtime.getSystemRuntime());
buf.useMemory(pointer);
return buf;
}
/**
* Similar to FUSE_BUFVEC_INIT macros
*/
public static void init(FuseBufvec buf, long size) {
buf.count.set(1);
buf.idx.set(0);
buf.off.set(0);
buf.buf.size.set(size);
buf.buf.flags.set(0);
buf.buf.mem.set(0);
buf.buf.fd.set(-1);
buf.buf.pos.set(0);
}
}