PVFS user programs can construct a data structure that represents a specifc set of non-contiguous data that is to be read from or written to a PVFS file. The PVFS library includes a set of routines for creating these structures in a controlled manner. These routines produce an opaque type the PVFS_Request which is actually a pointer to an internal structure, the PINT_Request.
typedef struct PINT_Request *PVFS_Request; /* user type for requests */ int PVFS_Request_contiguous(int count, PVFS_Request oldreq, PVFS_Request *newreq); int PVFS_Request_vector(int count, int blocklength, int stride, PVFS_Request oldreq, PVFS_Request *newreq); int PVFS_Request_hvector(int count, int blocklength, int64_t stride, PVFS_Request oldreq, PVFS_Request *newreq); int PVFS_Request_indexed(int count, int *blocklengths, int *displacements, PVFS_Request oldreq, PVFS_Request *newreq); int PVFS_Request_hindexed(int count, int *blocklengths, int64_t *displacements, PVFS_Request oldreq, PVFS_Request *newreq); int PVFS_Request_struct(int count, int *blocklengths, int64_t *displacements, PVFS_Request *oldreqs, PVFS_Request *newreq); int PVFS_Address(void* location, int64_t *address); int PVFS_Request_extent(PVFS_Request request, int64_t *extent); int PVFS_Request_size(PVFS_Request request, int *size); int PVFS_Request_lb(PVFS_Request request, int64_t* displacement); int PVFS_Request_ub(PVFS_Request request, int64_t* displacement);
These routines are based directly on the MPI datatype constructor routines of similar name and have the same semantics.