MCPcopy Create free account
hub / github.com/GoogleChrome/samples / UTF8ArrayToString

Function UTF8ArrayToString

sqlite-wasm-opfs/jswasm/sqlite3.js:348–385  ·  view source on GitHub ↗
(heapOrArray, idx, maxBytesToRead)

Source from the content-addressed store, hash-verified

346
347
348function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
349 var endIdx = idx + maxBytesToRead;
350 var endPtr = idx;
351
352
353
354 while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
355
356 if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
357 return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
358 }
359 var str = '';
360
361 while (idx < endPtr) {
362
363
364
365
366 var u0 = heapOrArray[idx++];
367 if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }
368 var u1 = heapOrArray[idx++] & 63;
369 if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }
370 var u2 = heapOrArray[idx++] & 63;
371 if ((u0 & 0xF0) == 0xE0) {
372 u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
373 } else {
374 u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);
375 }
376
377 if (u0 < 0x10000) {
378 str += String.fromCharCode(u0);
379 } else {
380 var ch = u0 - 0x10000;
381 str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
382 }
383 }
384 return str;
385}
386
387
388

Callers 2

UTF8ToStringFunction · 0.70
sqlite3.jsFile · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected