Каждая из следующих подпрограмм C упаковывает массив предоставленных данных определенного типа в активный буфер передачи. Они могут быть вызваны сколько угодно раз для упаковки данных в одно сообщение. Так, сообщение может содержать несколько массивов с данными различных типов. C-структуры в процессе упаковки должны принимать их индивидуальные элементы. На комплексность упаковываемых данных ограничений не накладывается, но приложение должно распаковывать сообщения точно в соответствии с тем, как они были упакованы. Этого требует практика безопасного программирования.
Аргументами для каждой из подпрограмм являются: указатель на первый из элементов для упаковки, nitem - суммарное число элементов для упаковки из данного массива и stride - ``шаг'' для использования во время упаковки. Шаг, равный 1, означает последовательную упаковку вектора, равный 2 - упаковку ``через раз'' и т.д. Исключение составляет подпрограмма pvm_pkstr(), которая завершает упаковку строки символов при появлении NULL и поэтому не требует наличия аргументов nitem и stride.
PVM также поддерживает подпрограммы упаковки с printf - подобными форматами выражений, которые указывают, как и какие данные упаковывать в буфер передачи. Все переменные передаются через адреса - если указаны счетчик и шаг; в противном случае, предполагается, что переменные будут передаваться значениями.
int stride)
int info = pvm_pkcplx( float *xp, int nitem,
int stride)
int info = pvm_pkdcplx( double *zp, int nitem,
int stride)
int info = pvm_pkdouble( double *dp, int nitem,
int stride)
int info = pvm_pkfloat( float *fp, int nitem,
int stride)
int info = pvm_pkint( int *np, int nitem,
int stride)
int info = pvm_pklong( long *np, int nitem,
int stride)
int info = pvm_pkshort( short *np, int nitem,
int stride)
int info = pvm_pkstr( char *cp)
int info = pvm_packfconst( char fmt, ...)
STRING 0 | REAL4 4 |
BYTE 1 | COMPLEX8 5 |
INTEGER2 2 | REAL8 6 |
INTEGER4 3 | COMPLEX16 7 |
Эти имена уже предопределены в параметрических конструкциях заголовочного файла /pvm3/include/pvm3.h. Ряд производителей может расширять этот список и включать в него поддержку 64-битных архитектур в своей реализации. INTEGER8, REAL16 и др. уже будут добавлены, как только будет реализована XDR-поддержка этих типов данных.