class Tros::IO::BinaryEncoder
Write leaf values
Attributes
writer[R]
Public Class Methods
new(writer)
click to toggle source
# File lib/tros/io.rb 153 def initialize(writer) 154 @writer = writer 155 end
Public Instance Methods
write(datum)
click to toggle source
Write an arbritary datum.
# File lib/tros/io.rb 212 def write(datum) 213 writer.write(datum) 214 end
write_boolean(datum)
click to toggle source
a boolean is written as a single byte whose value is either 0 (false) or 1 (true).
# File lib/tros/io.rb 164 def write_boolean(datum) 165 on_disk = datum ? 1.chr : 0.chr 166 writer.write(on_disk) 167 end
write_bytes(datum)
click to toggle source
Bytes are encoded as a long followed by that many bytes of data.
# File lib/tros/io.rb 200 def write_bytes(datum) 201 write_long(datum.bytesize) 202 @writer.write(datum) 203 end
write_double(datum)
click to toggle source
A double is written as 8 bytes. The double is converted into a 64-bit integer using a method equivalent to Java's doubleToLongBits and then encoded in little-endian format.
# File lib/tros/io.rb 195 def write_double(datum) 196 @writer.write([datum].pack('E')) 197 end
write_float(datum)
click to toggle source
A float is written as 4 bytes. The float is converted into a 32-bit integer using a method equivalent to Java's floatToIntBits and then encoded in little-endian format.
# File lib/tros/io.rb 187 def write_float(datum) 188 @writer.write([datum].pack('e')) 189 end
write_long(n)
click to toggle source
int and long values are written using variable-length, zig-zag coding.
# File lib/tros/io.rb 171 def write_long(n) 172 foo = n 173 n = (n << 1) ^ (n >> 63) 174 while (n & ~0x7F) != 0 175 @writer.write(((n & 0x7f) | 0x80).chr) 176 n >>= 7 177 end 178 @writer.write(n.chr) 179 end
Also aliased as: write_int
write_null(datum)
click to toggle source
null is written as zero bytes
# File lib/tros/io.rb 158 def write_null(datum) 159 nil 160 end
write_string(datum)
click to toggle source
A string is encoded as a long followed by that many bytes of UTF-8 encoded character data
# File lib/tros/io.rb 207 def write_string(datum) 208 write_bytes(datum.encode('UTF-8').force_encoding('binary')) 209 end