Class: Prism::Pack::Directive
- Inherits:
-
Object
- Object
- Prism::Pack::Directive
- Defined in:
- lib/prism/pack.rb,
ext/prism/api_pack.c
Overview
A directive in the pack template language.
Constant Summary collapse
- ENDIAN_DESCRIPTIONS =
The descriptions of the various types of endianness.
{ AGNOSTIC_ENDIAN: "agnostic", LITTLE_ENDIAN: "little-endian (VAX)", BIG_ENDIAN: "big-endian (network)", NATIVE_ENDIAN: "native-endian", ENDIAN_NA: "n/a" }
- SIGNED_DESCRIPTIONS =
The descriptions of the various types of signedness.
{ UNSIGNED: "unsigned", SIGNED: "signed", SIGNED_NA: "n/a" }
- SIZE_DESCRIPTIONS =
The descriptions of the various types of sizes.
{ 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" }
Instance Attribute Summary collapse
-
#endian ⇒ Object
readonly
The type of endianness of the directive.
-
#length ⇒ Object
readonly
The length of this directive (used for integers).
-
#length_type ⇒ Object
readonly
The length type of this directive (used for integers).
-
#signed ⇒ Object
readonly
The type of signedness of the directive.
-
#size ⇒ Object
readonly
The size of the directive.
-
#source ⇒ Object
readonly
A byteslice of the source string that this directive represents.
-
#type ⇒ Object
readonly
The type of the directive.
-
#variant ⇒ Object
readonly
A symbol representing whether or not we are packing or unpacking.
-
#version ⇒ Object
readonly
A symbol representing the version of Ruby.
Instance Method Summary collapse
-
#describe ⇒ Object
Provide a human-readable description of the directive.
-
#initialize(version, variant, source, type, signed, endian, size, length_type, length) ⇒ Directive
constructor
Initialize a new directive with the given values.
Constructor Details
#initialize(version, variant, source, type, signed, endian, size, length_type, length) ⇒ Directive
Initialize a new directive with the given values.
89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/prism/pack.rb', line 89 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 Attribute Details
#endian ⇒ Object (readonly)
The type of endianness of the directive.
77 78 79 |
# File 'lib/prism/pack.rb', line 77 def endian @endian end |
#length ⇒ Object (readonly)
The length of this directive (used for integers).
86 87 88 |
# File 'lib/prism/pack.rb', line 86 def length @length end |
#length_type ⇒ Object (readonly)
The length type of this directive (used for integers).
83 84 85 |
# File 'lib/prism/pack.rb', line 83 def length_type @length_type end |
#signed ⇒ Object (readonly)
The type of signedness of the directive.
74 75 76 |
# File 'lib/prism/pack.rb', line 74 def signed @signed end |
#size ⇒ Object (readonly)
The size of the directive.
80 81 82 |
# File 'lib/prism/pack.rb', line 80 def size @size end |
#source ⇒ Object (readonly)
A byteslice of the source string that this directive represents.
68 69 70 |
# File 'lib/prism/pack.rb', line 68 def source @source end |
#type ⇒ Object (readonly)
The type of the directive.
71 72 73 |
# File 'lib/prism/pack.rb', line 71 def type @type end |
#variant ⇒ Object (readonly)
A symbol representing whether or not we are packing or unpacking.
65 66 67 |
# File 'lib/prism/pack.rb', line 65 def variant @variant end |
#version ⇒ Object (readonly)
A symbol representing the version of Ruby.
62 63 64 |
# File 'lib/prism/pack.rb', line 62 def version @version end |
Instance Method Details
#describe ⇒ Object
Provide a human-readable description of the directive.
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/prism/pack.rb', line 131 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" else raise 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 |