These functions read/write data to/from the buffer in the ``external32'' data
format specified in Section External Data Representation: ``external32''
, and calculate the size needed
for packing. Their first arguments specify the data format, for future
extensibility, but
currently
the only valid value of the datarep
argument is ``external32.''
Advice to users.
These functions could be used, for example, to send typed data in a portable
format from one MPI implementation to another.
( End of advice to users.)
The buffer will contain exactly the packed data, without headers.
MPI_BYTE should be used to send and receive data that is packed
using MPI_PACK_EXTERNAL.
Rationale.
MPI_PACK_EXTERNAL specifies that there is no header on the message
and further
specifies the exact format of the data. Since MPI_PACK may (and is
allowed
to) use a header, the datatype MPI_PACKED cannot be used for data
packed with
MPI_PACK_EXTERNAL.
( End of rationale.)
MPI_PACK_EXTERNAL(datarep, inbuf, incount, datatype, outbuf, outsize, position) | |
IN datarep | data representation (string) |
IN inbuf | input buffer start (choice) |
IN incount | number of input data items (integer) |
IN datatype | datatype of each input data item (handle) |
OUT outbuf | output buffer start (choice) |
IN outsize | output buffer size, in bytes (integer) |
INOUT position | current position in buffer, in bytes (integer) |
int MPI_Pack_external(const char datarep[], const void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, MPI_Aint outsize, MPI_Aint *position)
MPI_Pack_external(datarep, inbuf, incount, datatype, outbuf, outsize, position, ierror)
CHARACTER(LEN=*), INTENT(IN) :: datarep
TYPE(*), DIMENSION(..), INTENT(IN) :: inbuf
TYPE(*), DIMENSION(..) :: outbuf
INTEGER, INTENT(IN) :: incount
TYPE(MPI_Datatype), INTENT(IN) :: datatype
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: outsize
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(INOUT) :: position
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
MPI_PACK_EXTERNAL(DATAREP, INBUF, INCOUNT, DATATYPE, OUTBUF, OUTSIZE, POSITION, IERROR)
INTEGER INCOUNT, DATATYPE, IERROR
INTEGER(KIND=MPI_ADDRESS_KIND) OUTSIZE, POSITION
CHARACTER*(*) DATAREP
<type> INBUF(*), OUTBUF(*)
MPI_UNPACK_EXTERNAL(datarep, inbuf, insize, position, outbuf, outsize, position) | |
IN datarep | data representation (string) |
IN inbuf | input buffer start (choice) |
IN insize | input buffer size, in bytes (integer) |
INOUT position | current position in buffer, in bytes (integer) |
OUT outbuf | output buffer start (choice) |
IN outcount | number of output data items (integer) |
IN datatype | datatype of output data item (handle) |
int MPI_Unpack_external(const char datarep[], const void *inbuf, MPI_Aint insize, MPI_Aint *position, void *outbuf, int outcount, MPI_Datatype datatype)
MPI_Unpack_external(datarep, inbuf, insize, position, outbuf, outcount, datatype, ierror)
CHARACTER(LEN=*), INTENT(IN) :: datarep
TYPE(*), DIMENSION(..), INTENT(IN) :: inbuf
TYPE(*), DIMENSION(..) :: outbuf
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(IN) :: insize
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(INOUT) :: position
INTEGER, INTENT(IN) :: outcount
TYPE(MPI_Datatype), INTENT(IN) :: datatype
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
MPI_UNPACK_EXTERNAL(DATAREP, INBUF, INSIZE, POSITION, OUTBUF, OUTCOUNT, DATATYPE, IERROR)
INTEGER OUTCOUNT, DATATYPE, IERROR
INTEGER(KIND=MPI_ADDRESS_KIND) INSIZE, POSITION
CHARACTER*(*) DATAREP
<type> INBUF(*), OUTBUF(*)
MPI_PACK_EXTERNAL_SIZE(datarep, incount, datatype, size) | |
IN datarep | data representation (string) |
IN incount | number of input data items (integer) |
IN datatype | datatype of each input data item (handle) |
OUT size | output buffer size, in bytes (integer) |
int MPI_Pack_external_size(const char datarep[], int incount, MPI_Datatype datatype, MPI_Aint *size)
MPI_Pack_external_size(datarep, incount, datatype, size, ierror)
TYPE(MPI_Datatype), INTENT(IN) :: datatype
INTEGER, INTENT(IN) :: incount
CHARACTER(LEN=*), INTENT(IN) :: datarep
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(OUT) :: size
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
MPI_PACK_EXTERNAL_SIZE(DATAREP, INCOUNT, DATATYPE, SIZE, IERROR)
INTEGER INCOUNT, DATATYPE, IERROR
INTEGER(KIND=MPI_ADDRESS_KIND) SIZE
CHARACTER*(*) DATAREP