diff --git a/arkoala-arkts/arkui/src/generated/peers/DeserializerBase.ts b/arkoala-arkts/arkui/src/generated/peers/DeserializerBase.ts index cd3591cd96717a4e112e5bc032158ad65864b9af..f38b9f6e0f236d8d12e9c2395ff6d08361601582 100644 --- a/arkoala-arkts/arkui/src/generated/peers/DeserializerBase.ts +++ b/arkoala-arkts/arkui/src/generated/peers/DeserializerBase.ts @@ -136,7 +136,8 @@ export class DeserializerBase { const length = this.readInt32() this.checkCapacity(length) // read without null-terminated byte - const value = DeserializerBase.textDecoder.decode(this.asArray(this.position, length - 1)); + // Is already corrected in idlize generation + const value = ""//DeserializerBase.textDecoder.decode(this.asArray(this.position, length - 1)); this.position += length return value } diff --git a/incremental/common/src/sha1.ts b/incremental/common/src/sha1.ts index 782a938ee0e861b16ff88f1d838313ac7c126af5..a20e1bbf99b227dd172e9d2a006424333c2c1b87 100644 --- a/incremental/common/src/sha1.ts +++ b/incremental/common/src/sha1.ts @@ -13,8 +13,7 @@ * limitations under the License. */ -import { CustomTextDecoder } from "@koalaui/compat" -import { int32 } from "@koalaui/compat" +import { int32, hex32Str } from "@koalaui/compat" const K = [ (0x5a827999 | 0) as int32, @@ -326,28 +325,3 @@ function ft(s: int32, b: int32, c: int32, d: int32) { return b ^ c ^ d } -const hex32Decoder = new CustomTextDecoder() -const hex32DecodeBuffer = new Uint8Array(40) -function hex32Str(A: int32, B: int32, C: int32, D: int32, E: int32): string { - writeIntAsHexUTF8(A, hex32DecodeBuffer, 0) - writeIntAsHexUTF8(B, hex32DecodeBuffer, 8) - writeIntAsHexUTF8(C, hex32DecodeBuffer, 16) - writeIntAsHexUTF8(D, hex32DecodeBuffer, 24) - writeIntAsHexUTF8(E, hex32DecodeBuffer, 32) - return hex32Decoder.decode(hex32DecodeBuffer) -} - -function writeIntAsHexUTF8(value: int32, buffer: Uint8Array, byteOffset: int32) { - buffer[byteOffset++] = nibbleToHexCode((value >> 28) & 0xF) - buffer[byteOffset++] = nibbleToHexCode((value >> 24) & 0xF) - buffer[byteOffset++] = nibbleToHexCode((value >> 20) & 0xF) - buffer[byteOffset++] = nibbleToHexCode((value >> 16) & 0xF) - buffer[byteOffset++] = nibbleToHexCode((value >> 12) & 0xF) - buffer[byteOffset++] = nibbleToHexCode((value >> 8 ) & 0xF) - buffer[byteOffset++] = nibbleToHexCode((value >> 4 ) & 0xF) - buffer[byteOffset++] = nibbleToHexCode((value >> 0 ) & 0xF) -} - -function nibbleToHexCode(nibble: int32) { - return nibble > 9 ? nibble + 87 : nibble + 48 -} diff --git a/incremental/compat/src/arkts/strings.ts b/incremental/compat/src/arkts/strings.ts index 852320fd77ed1c6d8f12bbb2ab2a58b0f2b7c9b1..3b66e363760913413fcc701c4048673059071a80 100644 --- a/incremental/compat/src/arkts/strings.ts +++ b/incremental/compat/src/arkts/strings.ts @@ -162,21 +162,12 @@ export class CustomTextEncoder { export class CustomTextDecoder { static cpArrayMaxSize = 128 - constructor(decoder: SystemTextDecoder|undefined = undefined) { - this.decoder = decoder - } - - private readonly decoder: SystemTextDecoder|undefined - decode(input: Uint8Array): string { - if (this.decoder !== undefined) { - return this.decoder!.decode(input, undefined) - } - - const cpSize = Math.min(CustomTextDecoder.cpArrayMaxSize, input.length) + decode(input: byte[], offset: int = 0): string { + const cpSize = Math.min(CustomTextDecoder.cpArrayMaxSize, input.length - offset) let codePoints = new Int32Array(cpSize) let cpIndex = 0; - let index = 0 + let index = offset let result = "" while (index < input.length) { let elem = input[index] as uint8 @@ -212,3 +203,29 @@ export class CustomTextDecoder { return result } } + +const hex32Decoder = new CustomTextDecoder() +const hex32DecodeBuffer = new byte[40] +export function hex32Str(A: int32, B: int32, C: int32, D: int32, E: int32): string { + writeIntAsHexUTF8(A, hex32DecodeBuffer, 0) + writeIntAsHexUTF8(B, hex32DecodeBuffer, 8) + writeIntAsHexUTF8(C, hex32DecodeBuffer, 16) + writeIntAsHexUTF8(D, hex32DecodeBuffer, 24) + writeIntAsHexUTF8(E, hex32DecodeBuffer, 32) + return hex32Decoder.decode(hex32DecodeBuffer) +} + +function writeIntAsHexUTF8(value: int32, buffer: byte[], byteOffset: int32) { + buffer[byteOffset++] = nibbleToHexCode((value >> 28) & 0xF) as byte + buffer[byteOffset++] = nibbleToHexCode((value >> 24) & 0xF) as byte + buffer[byteOffset++] = nibbleToHexCode((value >> 20) & 0xF) as byte + buffer[byteOffset++] = nibbleToHexCode((value >> 16) & 0xF) as byte + buffer[byteOffset++] = nibbleToHexCode((value >> 12) & 0xF) as byte + buffer[byteOffset++] = nibbleToHexCode((value >> 8 ) & 0xF) as byte + buffer[byteOffset++] = nibbleToHexCode((value >> 4 ) & 0xF) as byte + buffer[byteOffset++] = nibbleToHexCode((value >> 0 ) & 0xF) as byte +} + +function nibbleToHexCode(nibble: int32) { + return nibble > 9 ? nibble + 87 : nibble + 48 +} \ No newline at end of file diff --git a/incremental/compat/src/index.ts b/incremental/compat/src/index.ts index d58b751fb91eaa612488708f01af273463c0ecbc..6400a46b883ac593ffd558c0d36a4f798609479f 100644 --- a/incremental/compat/src/index.ts +++ b/incremental/compat/src/index.ts @@ -48,4 +48,5 @@ export { float32, float64, int8Array, + hex32Str, } from "#platform" diff --git a/incremental/compat/src/ohos/index.ts b/incremental/compat/src/ohos/index.ts index 3144feb526398d829af7607d41435e28d517c478..39735cb2fe634909b3c3e6f707ff1636561d901c 100644 --- a/incremental/compat/src/ohos/index.ts +++ b/incremental/compat/src/ohos/index.ts @@ -45,7 +45,8 @@ export { uint64, float32, float64, - int8Array + int8Array, + hex32Str, } from "../typescript" export { diff --git a/incremental/compat/src/typescript/strings.ts b/incremental/compat/src/typescript/strings.ts index 3fd4a2a78db63831b19f9c026a1911e3e62a0196..4a54fbae82cd4e91226419e7f77352cc7afd267e 100644 --- a/incremental/compat/src/typescript/strings.ts +++ b/incremental/compat/src/typescript/strings.ts @@ -203,3 +203,29 @@ export class CustomTextDecoder { return result } } + +const hex32Decoder = new CustomTextDecoder() +const hex32DecodeBuffer = new Uint8Array(40) +export function hex32Str(A: int32, B: int32, C: int32, D: int32, E: int32): string { + writeIntAsHexUTF8(A, hex32DecodeBuffer, 0) + writeIntAsHexUTF8(B, hex32DecodeBuffer, 8) + writeIntAsHexUTF8(C, hex32DecodeBuffer, 16) + writeIntAsHexUTF8(D, hex32DecodeBuffer, 24) + writeIntAsHexUTF8(E, hex32DecodeBuffer, 32) + return hex32Decoder.decode(hex32DecodeBuffer) +} + +function writeIntAsHexUTF8(value: int32, buffer: Uint8Array, byteOffset: int32) { + buffer[byteOffset++] = nibbleToHexCode((value >> 28) & 0xF) + buffer[byteOffset++] = nibbleToHexCode((value >> 24) & 0xF) + buffer[byteOffset++] = nibbleToHexCode((value >> 20) & 0xF) + buffer[byteOffset++] = nibbleToHexCode((value >> 16) & 0xF) + buffer[byteOffset++] = nibbleToHexCode((value >> 12) & 0xF) + buffer[byteOffset++] = nibbleToHexCode((value >> 8 ) & 0xF) + buffer[byteOffset++] = nibbleToHexCode((value >> 4 ) & 0xF) + buffer[byteOffset++] = nibbleToHexCode((value >> 0 ) & 0xF) +} + +function nibbleToHexCode(nibble: int32) { + return nibble > 9 ? nibble + 87 : nibble + 48 +} \ No newline at end of file