diff --git a/incremental/compat/src/arkts/array.ts b/incremental/compat/src/arkts/array.ts index 83e3b1dcea5cb56fa4749ea0ac2597910aa466a0..f277186283c465fd445415f893b1cf81fb6c1d4d 100644 --- a/incremental/compat/src/arkts/array.ts +++ b/incremental/compat/src/arkts/array.ts @@ -17,8 +17,12 @@ import { float64, int32, int8 } from "./types" // TODO: this can be a performance disaster // just wait for the library to provide the proper functionality. -export function asArray(value: T[]): Array { - return Array.of(...value) +export function asArray(value: FixedArray): Array { + const arr = new Array(value.length) + for (let i: int32 = 0; i < value.length; i++) { + arr[i] = value[i] + } + return arr } // TODO: this can be a performance disaster @@ -34,8 +38,8 @@ export function Array_from_set(set: Set): Array { // TODO: this can be a performance disaster // just wait for the library to provide the proper functionality. -export function Array_from_int32(data: Int32Array): number[] { - const result: number[] = [] +export function Array_from_int32(data: Int32Array): Array { + const result: Array = new number[data.length]; for (let i: int32 = 0; i < data.length; i++) { result[i] = data.at(i) as number } @@ -44,7 +48,7 @@ export function Array_from_int32(data: Int32Array): number[] { // TODO: this can be a performance disaster // just wait for the library to provide the proper functionality. -export function Array_from_number(data: float64[]): Array { +export function Array_from_number(data: FixedArray): Array { const result = new Array(data.length) for (let i: int32 = 0; i < data.length; i++) { result[i] = data[i] diff --git a/interop/src/arkts/SerializerBase.ts b/interop/src/arkts/SerializerBase.ts index 151d4720fc87139376ab7842ddccc2e652c100e4..5184552f9fb5477a3d99fab73f941535558942e6 100644 --- a/interop/src/arkts/SerializerBase.ts +++ b/interop/src/arkts/SerializerBase.ts @@ -187,9 +187,9 @@ export class SerializerBase implements Disposable { return (this.position - this._buffer) as int32 } - final toArray(): byte[] { + final toArray(): FixedArray { const len = this.length() - let result = new byte[len] + let result: FixedArray = new byte[len] for (let i = 0; i < len; i++) { result[i] = unsafeMemory.readInt8(this._buffer + i) } diff --git a/interop/src/cpp/ani/convertors-ani.h b/interop/src/cpp/ani/convertors-ani.h index 1144fe141c6407889bc65c90eaf953b469a837f7..61aafb2b899001eef5eab241355f38b74bdac51c 100644 --- a/interop/src/cpp/ani/convertors-ani.h +++ b/interop/src/cpp/ani/convertors-ani.h @@ -242,21 +242,21 @@ struct InteropTypeConverter { template<> struct InteropTypeConverter { - using InteropType = ani_array_int; + using InteropType = ani_fixedarray_int; static KInt* convertFrom(ani_env* env, InteropType value) { if (!value) return nullptr; ani_size length = 0; - CHECK_ANI_FATAL(env->Array_GetLength(value, &length)); + CHECK_ANI_FATAL(env->FixedArray_GetLength(value, &length)); KInt* data = new KInt[length]; - CHECK_ANI_FATAL(env->Array_GetRegion_Int(value, 0, length, (ani_int*)data)); + CHECK_ANI_FATAL(env->FixedArray_GetRegion_Int(value, 0, length, (ani_int*)data)); return data; } static InteropType convertTo(ani_env* env, KInt* value) = delete; static void release(ani_env* env, InteropType value, KInt* converted) { if (converted) { ani_size length = 0; - CHECK_ANI_FATAL(env->Array_GetLength(value, &length)); - CHECK_ANI_FATAL(env->Array_SetRegion_Int(value, 0, length, (ani_int*)converted)); + CHECK_ANI_FATAL(env->FixedArray_GetLength(value, &length)); + CHECK_ANI_FATAL(env->FixedArray_SetRegion_Int(value, 0, length, (ani_int*)converted)); } delete [] converted; } @@ -264,21 +264,21 @@ struct InteropTypeConverter { template<> struct InteropTypeConverter { - using InteropType = ani_array_float; + using InteropType = ani_fixedarray_float; static KFloat* convertFrom(ani_env* env, InteropType value) { if (!value) return nullptr; ani_size length = 0; - CHECK_ANI_FATAL(env->Array_GetLength(value, &length)); + CHECK_ANI_FATAL(env->FixedArray_GetLength(value, &length)); KFloat* data = new KFloat[length]; - CHECK_ANI_FATAL(env->Array_GetRegion_Float(value, 0, length, (ani_float*)data)); + CHECK_ANI_FATAL(env->FixedArray_GetRegion_Float(value, 0, length, (ani_float*)data)); return data; } static InteropType convertTo(ani_env* env, KFloat* value) = delete; static void release(ani_env* env, InteropType value, KFloat* converted) { if (converted) { ani_size length = 0; - CHECK_ANI_FATAL(env->Array_GetLength(value, &length)); - CHECK_ANI_FATAL(env->Array_SetRegion_Float(value, 0, length, (ani_float*)converted)); + CHECK_ANI_FATAL(env->FixedArray_GetLength(value, &length)); + CHECK_ANI_FATAL(env->FixedArray_SetRegion_Float(value, 0, length, (ani_float*)converted)); } delete [] converted; } @@ -286,21 +286,21 @@ struct InteropTypeConverter { template<> struct InteropTypeConverter { - using InteropType = ani_array_byte; + using InteropType = ani_fixedarray_byte; static KByte* convertFrom(ani_env* env, InteropType value) { if (!value) return nullptr; ani_size length = 0; - CHECK_ANI_FATAL(env->Array_GetLength(value, &length)); + CHECK_ANI_FATAL(env->FixedArray_GetLength(value, &length)); KByte* data = new KByte[length]; - CHECK_ANI_FATAL(env->Array_GetRegion_Byte(value, 0, length, (ani_byte*)data)); + CHECK_ANI_FATAL(env->FixedArray_GetRegion_Byte(value, 0, length, (ani_byte*)data)); return data; } static InteropType convertTo(ani_env* env, KByte* value) = delete; static void release(ani_env* env, InteropType value, KByte* converted) { if (converted) { ani_size length = 0; - CHECK_ANI_FATAL(env->Array_GetLength(value, &length)); - CHECK_ANI_FATAL(env->Array_SetRegion_Byte(value, 0, length, (ani_byte*)converted)); + CHECK_ANI_FATAL(env->FixedArray_GetLength(value, &length)); + CHECK_ANI_FATAL(env->FixedArray_SetRegion_Byte(value, 0, length, (ani_byte*)converted)); } delete[] converted; }