Class: GuitarProParser::InputStream
- Inherits:
-
Object
- Object
- GuitarProParser::InputStream
- Defined in:
- lib/guitar_pro_parser/io/input_stream.rb
Constant Summary collapse
- INTEGER_LENGTH =
4
- SHORT_INTEGER_LENGTH =
2
- BYTE_LENGTH =
1
Instance Attribute Summary collapse
-
#offset ⇒ Object
Returns the value of attribute offset.
Instance Method Summary collapse
- #increment_offset(delta) ⇒ Object
-
#initialize(file_path) ⇒ InputStream
constructor
A new instance of InputStream.
-
#read_bitmask ⇒ Object
Reads byte as 8-bit bitmask.
-
#read_boolean ⇒ Object
Reads signed byte as boolean (8 bit).
-
#read_byte ⇒ Object
Reads unsigned byte (8 bits) (0..255).
-
#read_chunk ⇒ Object
Reads data chunk from file.
-
#read_integer ⇒ Object
Reads unsigned integer (4 bytes).
-
#read_short_integer ⇒ Object
Reads unsigned short integer (2 bytes).
-
#read_signed_byte ⇒ Object
Reads signed byte (8 bits) (-127..127).
-
#read_signed_integer ⇒ Object
Reads signed integer (4 bytes).
-
#read_signed_short_integer ⇒ Object
Reads signed short integer (2 bytes).
-
#read_string(length) ⇒ Object
Reads string with specified length.
- #skip_byte ⇒ Object
- #skip_integer ⇒ Object
- #skip_short_integer ⇒ Object
Constructor Details
#initialize(file_path) ⇒ InputStream
Returns a new instance of InputStream.
11 12 13 14 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 11 def initialize file_path @file_path = file_path @offset = 0 end |
Instance Attribute Details
#offset ⇒ Object
Returns the value of attribute offset.
9 10 11 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 9 def offset @offset end |
Instance Method Details
#increment_offset(delta) ⇒ Object
92 93 94 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 92 def increment_offset delta @offset = @offset + delta end |
#read_bitmask ⇒ Object
Reads byte as 8-bit bitmask
71 72 73 74 75 76 77 78 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 71 def read_bitmask bits = [] value = read_byte value.to_s(2).each_char { |bit| bits << !bit.to_i.zero? } bits.reverse! bits << false while bits.count < 8 bits end |
#read_boolean ⇒ Object
Reads signed byte as boolean (8 bit)
59 60 61 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 59 def read_boolean !read_byte.zero? end |
#read_byte ⇒ Object
Reads unsigned byte (8 bits) (0..255)
45 46 47 48 49 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 45 def read_byte value = IO.binread(@file_path, BYTE_LENGTH, @offset).unpack('C')[0] skip_byte value end |
#read_chunk ⇒ Object
Reads data chunk from file.
Chunk’s format is: 4 bytes - field length (including string length byte that follows this value) 1 byte - string length (N) N bytes - string
86 87 88 89 90 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 86 def read_chunk skip_integer string_length = read_byte read_string string_length end |
#read_integer ⇒ Object
Reads unsigned integer (4 bytes)
17 18 19 20 21 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 17 def read_integer value = IO.binread(@file_path, INTEGER_LENGTH, @offset).unpack('i')[0] skip_integer value end |
#read_short_integer ⇒ Object
Reads unsigned short integer (2 bytes)
31 32 33 34 35 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 31 def read_short_integer value = IO.binread(@file_path, SHORT_INTEGER_LENGTH, @offset).unpack('S_')[0] skip_short_integer value end |
#read_signed_byte ⇒ Object
Reads signed byte (8 bits) (-127..127)
52 53 54 55 56 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 52 def read_signed_byte value = IO.binread(@file_path, BYTE_LENGTH, @offset).unpack('c')[0] skip_byte value end |
#read_signed_integer ⇒ Object
Reads signed integer (4 bytes)
24 25 26 27 28 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 24 def read_signed_integer value = IO.binread(@file_path, INTEGER_LENGTH, @offset).unpack('I')[0] skip_integer value end |
#read_signed_short_integer ⇒ Object
Reads signed short integer (2 bytes)
38 39 40 41 42 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 38 def read_signed_short_integer value = IO.binread(@file_path, SHORT_INTEGER_LENGTH, @offset).unpack('s_')[0] skip_short_integer value end |
#read_string(length) ⇒ Object
Reads string with specified length
64 65 66 67 68 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 64 def read_string(length) value = IO.binread(@file_path, length, @offset) increment_offset(length) value end |
#skip_byte ⇒ Object
104 105 106 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 104 def skip_byte increment_offset(BYTE_LENGTH) end |
#skip_integer ⇒ Object
96 97 98 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 96 def skip_integer increment_offset(INTEGER_LENGTH) end |
#skip_short_integer ⇒ Object
100 101 102 |
# File 'lib/guitar_pro_parser/io/input_stream.rb', line 100 def skip_short_integer increment_offset(SHORT_INTEGER_LENGTH) end |