Method: CMF::Varint.serialize

Defined in:
lib/cmf/varint.rb

.serialize(io, n) ⇒ nil

Serializes an integer into a varint.

Parameters:

  • io (StringIO)

    The IO stream where the serialized varint will be written.

  • n (Integer)

    The integer to serialize.

Returns:

  • (nil)


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/cmf/varint.rb', line 12

def self.serialize(io, n)
  n.is_a?(Integer) or raise TypeError, "Invalid Varint value #{n}. Must be an integer"
  n >= 0 or raise ArgumentError, "Invalid Varint value #{n}. Must be >= 0"

  data = []
  mask = 0
  begin
    data.push((n & 0x7F) | mask)
    n = (n >> 7) - 1
    mask = 0x80
  end while n >= 0

  data.reverse_each do |byte|
    io.putc(byte)
  end

  nil
end