A directive in the pack template language.
Methods
Constants
ENDIAN_DESCRIPTIONS | = | { AGNOSTIC_ENDIAN: "agnostic", LITTLE_ENDIAN: "little-endian (VAX)", BIG_ENDIAN: "big-endian (network)", NATIVE_ENDIAN: "native-endian", ENDIAN_NA: "n/a" } |
The descriptions of the various types of endianness. |
||
SIGNED_DESCRIPTIONS | = | { UNSIGNED: "unsigned", SIGNED: "signed", SIGNED_NA: "n/a" } |
The descriptions of the various types of signedness. |
||
SIZE_DESCRIPTIONS | = | { SIZE_SHORT: "short", SIZE_INT: "int-width", SIZE_LONG: "long", SIZE_LONG_LONG: "long long", SIZE_8: "8-bit", SIZE_16: "16-bit", SIZE_32: "32-bit", SIZE_64: "64-bit", SIZE_P: "pointer-width" } |
The descriptions of the various types of sizes. |
Attributes
[R] | endian | The type of endianness of the directive. |
[R] | length | The length of this directive (used for integers). |
[R] | length_type | The length type of this directive (used for integers). |
[R] | signed | The type of signedness of the directive. |
[R] | size | The size of the directive. |
[R] | source | A byteslice of the source string that this directive represents. |
[R] | type | The type of the directive. |
[R] | variant | A symbol representing whether or not we are packing or unpacking. |
[R] | version | A symbol representing the version of Ruby. |
Class Public methods
new(version, variant, source, type, signed, endian, size, length_type, length) Link
Initialize a new directive with the given values.
# File ruby/lib/prism/pack.rb, line 88 def initialize(version, variant, source, type, signed, endian, size, length_type, length) @version = version @variant = variant @source = source @type = type @signed = signed @endian = endian @size = size @length_type = length_type @length = length end
Instance Public methods
describe() Link
Provide a human-readable description of the directive.
# File ruby/lib/prism/pack.rb, line 130 def describe case type when SPACE "whitespace" when COMMENT "comment" when INTEGER if size == SIZE_8 base = "#{SIGNED_DESCRIPTIONS[signed]} #{SIZE_DESCRIPTIONS[size]} integer" else base = "#{SIGNED_DESCRIPTIONS[signed]} #{SIZE_DESCRIPTIONS[size]} #{ENDIAN_DESCRIPTIONS[endian]} integer" end case length_type when LENGTH_FIXED if length > 1 base + ", x#{length}" else base end when LENGTH_MAX base + ", as many as possible" end when UTF8 "UTF-8 character" when BER "BER-compressed integer" when FLOAT "#{SIZE_DESCRIPTIONS[size]} #{ENDIAN_DESCRIPTIONS[endian]} float" when STRING_SPACE_PADDED "arbitrary binary string (space padded)" when STRING_NULL_PADDED "arbitrary binary string (null padded, count is width)" when STRING_NULL_TERMINATED "arbitrary binary string (null padded, count is width), except that null is added with *" when STRING_MSB "bit string (MSB first)" when STRING_LSB "bit string (LSB first)" when STRING_HEX_HIGH "hex string (high nibble first)" when STRING_HEX_LOW "hex string (low nibble first)" when STRING_UU "UU-encoded string" when STRING_MIME "quoted printable, MIME encoding" when STRING_BASE64 "base64 encoded string" when STRING_FIXED "pointer to a structure (fixed-length string)" when STRING_POINTER "pointer to a null-terminated string" when MOVE "move to absolute position" when BACK "back up a byte" when NULL "null byte" else raise end end