Module: BinReadable

Defined in:
lib/more/facets/binreadable.rb

Overview

BinReadable

This mixin solely depends on method read(n), which must be defined in the class/module where you mix in this module.

Defined Under Namespace

Modules: ByteOrder

Instance Method Summary collapse

Instance Method Details

#byte_orderObject Also known as: byteorder

default is native byte-order



77
78
79
# File 'lib/more/facets/binreadable.rb', line 77

def byte_order
  @byte_order || ByteOrder::Native
end

#byte_order=(new_byteorder) ⇒ Object Also known as: byteorder=



81
82
83
# File 'lib/more/facets/binreadable.rb', line 81

def byte_order=(new_byteorder)
  @byte_order = new_byteorder
end

#read_cstringObject



191
192
193
194
195
196
197
# File 'lib/more/facets/binreadable.rb', line 191

def read_cstring
  str = ""
  while (c=readn(1)) != "\0"
    str << c
  end
  str
end

#read_int16_bigObject



127
128
129
130
# File 'lib/more/facets/binreadable.rb', line 127

def read_int16_big
  # swap bytes if native=little (but we want big)
  ru_swap(2, 's', ByteOrder::Little)
end

#read_int16_littleObject



122
123
124
125
# File 'lib/more/facets/binreadable.rb', line 122

def read_int16_little
  # swap bytes if native=big (but we want little)
  ru_swap(2, 's', ByteOrder::Big)
end

#read_int16_nativeObject

Signed



118
119
120
# File 'lib/more/facets/binreadable.rb', line 118

def read_int16_native
  ru(2, 's')
end

#read_int32_bigObject



159
160
161
162
# File 'lib/more/facets/binreadable.rb', line 159

def read_int32_big
  # swap bytes if native=little (but we want big)
  ru_swap(4, 'l', ByteOrder::Little)
end

#read_int32_littleObject



154
155
156
157
# File 'lib/more/facets/binreadable.rb', line 154

def read_int32_little
  # swap bytes if native=big (but we want little)
  ru_swap(4, 'l', ByteOrder::Big)
end

#read_int32_nativeObject

Signed



150
151
152
# File 'lib/more/facets/binreadable.rb', line 150

def read_int32_native
  ru(4, 'l')
end

#read_int8Object



96
97
98
# File 'lib/more/facets/binreadable.rb', line 96

def read_int8
  ru(1, 'c')
end

#read_word16_bigObject



112
113
114
# File 'lib/more/facets/binreadable.rb', line 112

def read_word16_big
  ru(2, 'n')
end

#read_word16_littleObject



108
109
110
# File 'lib/more/facets/binreadable.rb', line 108

def read_word16_little
  ru(2, 'v')
end

#read_word16_nativeObject

Unsigned



104
105
106
# File 'lib/more/facets/binreadable.rb', line 104

def read_word16_native
  ru(2, 'S')
end

#read_word32_bigObject



144
145
146
# File 'lib/more/facets/binreadable.rb', line 144

def read_word32_big
  ru(4, 'N')
end

#read_word32_littleObject



140
141
142
# File 'lib/more/facets/binreadable.rb', line 140

def read_word32_little
  ru(4, 'V')
end

#read_word32_nativeObject

Unsigned



136
137
138
# File 'lib/more/facets/binreadable.rb', line 136

def read_word32_native
  ru(4, 'L')
end

#read_word8Object Also known as: read_uint8

no byteorder for 8 bit!



92
93
94
# File 'lib/more/facets/binreadable.rb', line 92

def read_word8
  ru(1, 'C')
end

#readn(n) ⇒ Object

read exactly n characters, otherwise raise an exception.



200
201
202
203
204
# File 'lib/more/facets/binreadable.rb', line 200

def readn(n)
  str = read(n)
  raise "couldn't read #{n} characters" if str.nil? or str.size != n
  str
end