module Protobuf::VarintPure

Constants

CACHE_LIMIT

Public Instance Methods

cached_varint(value) click to toggle source
# File lib/protobuf/varint_pure.rb, line 5
def cached_varint(value)
  @_varint_cache ||= {}
  (@_varint_cache[value] ||= encode(value, false)).dup
end
decode(stream) click to toggle source
# File lib/protobuf/varint_pure.rb, line 10
def decode(stream)
  value = index = 0
  begin
    byte = stream.readbyte
    value |= (byte & 0x7f) << (7 * index)
    index += 1
  end while (byte & 0x80).nonzero?
  value
end
encode(value, use_cache = true) click to toggle source
# File lib/protobuf/varint_pure.rb, line 20
def encode(value, use_cache = true)
  return cached_varint(value) if use_cache && value >= 0 && value <= CACHE_LIMIT

  bytes = []
  until value < 128
    bytes << (0x80 | (value & 0x7f))
    value >>= 7
  end
  (bytes << value).pack('C*')
end