| import type { StringReader, StringWriter } from './strings'; | |
| export const comma = ','.charCodeAt(0); | |
| export const semicolon = ';'.charCodeAt(0); | |
| const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; | |
| const intToChar = new Uint8Array(64); // 64 possible chars. | |
| const charToInt = new Uint8Array(128); // z is 122 in ASCII | |
| for (let i = 0; i < chars.length; i++) { | |
| const c = chars.charCodeAt(i); | |
| intToChar[i] = c; | |
| charToInt[c] = i; | |
| } | |
| export function decodeInteger(reader: StringReader): number { | |
| let value = 0; | |
| let shift = 0; | |
| let integer = 0; | |
| do { | |
| const c = reader.next(); | |
| integer = charToInt[c]; | |
| value |= (integer & 31) << shift; | |
| shift += 5; | |
| } while (integer & 32); | |
| return value; | |
| } | |
| export function decodeSign(num: number): number { | |
| return num & 1 ? -0x80000000 | -(num >>> 1) : num >>> 1; | |
| } | |
| export function encodeInteger(builder: StringWriter, num: number) { | |
| do { | |
| let clamped = num & 0b011111; | |
| num >>>= 5; | |
| if (num > 0) clamped |= 0b100000; | |
| builder.write(intToChar[clamped]); | |
| } while (num > 0); | |
| } | |
| export function encodeSign(num: number): number { | |
| return num < 0 ? (-num << 1) | 1 : num << 1; | |
| } | |
| export function hasMoreVlq(reader: StringReader, max: number) { | |
| if (reader.pos >= max) return false; | |
| return reader.peek() !== comma; | |
| } | |
Xet Storage Details
- Size:
- 1.32 kB
- Xet hash:
- 3c22960c570f717f2b6585e744e02a08850f835cd8bcb900133f06ee7c3f50e3
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.