1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (factory((global.vlq = global.vlq || {})));
- }(this, (function (exports) { 'use strict';
-
- var charToInteger = {};
- var integerToChar = {};
-
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.split( '' ).forEach( function ( char, i ) {
- charToInteger[ char ] = i;
- integerToChar[ i ] = char;
- });
-
- function decode ( string ) {
- var result = [];
- var shift = 0;
- var value = 0;
-
- for ( var i = 0; i < string.length; i += 1 ) {
- var integer = charToInteger[ string[i] ];
-
- if ( integer === undefined ) {
- throw new Error( 'Invalid character (' + string[i] + ')' );
- }
-
- var hasContinuationBit = integer & 32;
-
- integer &= 31;
- value += integer << shift;
-
- if ( hasContinuationBit ) {
- shift += 5;
- } else {
- var shouldNegate = value & 1;
- value >>= 1;
-
- result.push( shouldNegate ? -value : value );
-
- // reset
- value = shift = 0;
- }
- }
-
- return result;
- }
-
- function encode ( value ) {
- var result;
-
- if ( typeof value === 'number' ) {
- result = encodeInteger( value );
- } else {
- result = '';
- for ( var i = 0; i < value.length; i += 1 ) {
- result += encodeInteger( value[i] );
- }
- }
-
- return result;
- }
-
- function encodeInteger ( num ) {
- var result = '';
-
- if ( num < 0 ) {
- num = ( -num << 1 ) | 1;
- } else {
- num <<= 1;
- }
-
- do {
- var clamped = num & 31;
- num >>= 5;
-
- if ( num > 0 ) {
- clamped |= 32;
- }
-
- result += integerToChar[ clamped ];
- } while ( num > 0 );
-
- return result;
- }
-
- exports.decode = decode;
- exports.encode = encode;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
- })));
|