docs/dev/byteorder.pod - Byteorder Conversion Functions
The byteorder code will check the endianness of an INTVAL or an opcode_t value and swap from little to big, or big to little when appropriate. Functions also exist to convert a 4, 8, 12, or 16 byte character buffer to big or little endian. The functions will be placed in the PackFile vtable and will be called when necessary. The Parrot interpreter should be smart enough to avoid calling these functions when converting from and to the same byteorder.
INTVAL
opcode_t
The algorithm to change from one endianness to another is identical and simple to understand. Basically, the size of an INTVAL or opcode_t is used to determine at compile time how many bits should be shifted around. Then the correct bits are shifted by the correct amounts (please look at source code for exact amounts). The buffer change functions are implemented by a straight forward algorithm that assigns swaps all of the bytes.
fetch_iv_le
This function will convert an INTVAL into little endian format. It is a no-op if the native format is already little endian.
fetch_iv_be
This function will convert an INTVAL into big endian format. It is a no-op if the native format is already big endian.
fetch_op_le
This function will convert an opcode_t into little endian format. It is a no-op if the native format is already little endian.
fetch_op_be
This function will convert an opcode_t into big endian format. It is a no-op if the native format is already big endian.
fetch_buf_le_
This set of functions will convert an unsigned character buffer into little endian format. Only a memcpy is performed if the native format is already little endian.
memcpy
fetch_buf_be_
This set of functions will convert an unsigned character buffer into big endian format. Only a memcpy is performed if the native format is already big endian.
endianize_fetch_int
Fetch an INTVAL directly from a bytestream
endianize_put_int
Put an INTVAL directly on a bytestream
Initial version by Melvin on 2002/05/01
This assumes big or little endianness...other, more esoteric forms (such as middle endian) are not supported. Also, an assumption of 4 or 8 byte INTVAL's and opcode_t's is made.
To install SmartLink, copy and paste the appropriate command in to your terminal.
cpanm
cpanm SmartLink
CPAN shell
perl -MCPAN -e shell install SmartLink
For more information on module installation, please visit the detailed CPAN module installation guide.