This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Sass
|
||||
class Compiler
|
||||
# The {Varint} module.
|
||||
#
|
||||
# It reads and writes varints.
|
||||
module Varint
|
||||
module_function
|
||||
|
||||
def length(value)
|
||||
return 1 if value < 128
|
||||
|
||||
(value.bit_length + 6) / 7
|
||||
end
|
||||
|
||||
def read(readable)
|
||||
value = bits = 0
|
||||
loop do
|
||||
byte = readable.readbyte
|
||||
value |= (byte & 0x7f) << bits
|
||||
bits += 7
|
||||
break if byte < 0x80
|
||||
end
|
||||
value
|
||||
end
|
||||
|
||||
def write(writeable, value)
|
||||
until value < 0x80
|
||||
writeable << ((value & 0x7f) | 0x80)
|
||||
value >>= 7
|
||||
end
|
||||
writeable << value
|
||||
end
|
||||
end
|
||||
|
||||
private_constant :Varint
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user