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_int(n)
Alias for: write_long
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