(heapOrArray, idx, maxBytesToRead)
| 346 | |
| 347 | |
| 348 | function 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 |
no outgoing calls
no test coverage detected