Method: CMF::Varint.serialize
- Defined in:
- lib/cmf/varint.rb
.serialize(io, n) ⇒ nil
Serializes an integer into a varint.
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 |