File tree Expand file tree Collapse file tree 1 file changed +15
-13
lines changed Expand file tree Collapse file tree 1 file changed +15
-13
lines changed Original file line number Diff line number Diff line change @@ -428,21 +428,23 @@ def vlq_encode(ary)
428
428
# Returns an Array of Integers.
429
429
def vlq_decode ( str )
430
430
result = [ ]
431
- chars = str . split ( '' )
432
- while chars . any?
433
- vlq = 0
434
- shift = 0
435
- continuation = true
436
- while continuation
437
- char = chars . shift
438
- raise ArgumentError unless char
439
- digit = BASE64_VALUES [ char ]
440
- continuation = false if ( digit & VLQ_CONTINUATION_BIT ) == 0
441
- digit &= VLQ_BASE_MASK
442
- vlq += digit << shift
431
+ shift = 0
432
+ value = 0
433
+ i = 0
434
+
435
+ while i < str . size do
436
+ digit = BASE64_VALUES [ str [ i ] ]
437
+ raise ArgumentError unless digit
438
+ continuation = ( digit & VLQ_CONTINUATION_BIT ) != 0
439
+ digit &= VLQ_CONTINUATION_BIT - 1
440
+ value += digit << shift
441
+ if continuation
443
442
shift += VLQ_BASE_SHIFT
443
+ else
444
+ result << ( ( value & 1 ) == 1 ? -( value >> 1 ) : value >> 1 )
445
+ value = shift = 0
444
446
end
445
- result << ( vlq & 1 == 1 ? - ( vlq >> 1 ) : vlq >> 1 )
447
+ i += 1
446
448
end
447
449
result
448
450
end
You can’t perform that action at this time.
0 commit comments