X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=typescript_strings.py;h=46a2991c9f83f355b1c438247eb8ca12e802e55d;hb=2056a98d21238f0761b5ed11c264cdc5bbffab64;hp=37d12b61818efbfa35fedc92e79b717364449a2c;hpb=1d1229d708592d16cbeddc56ab2629e50889dc27;p=ldk-java diff --git a/typescript_strings.py b/typescript_strings.py index 37d12b61..46a2991c 100644 --- a/typescript_strings.py +++ b/typescript_strings.py @@ -166,6 +166,16 @@ export function WitnessVersionArrToBytes(inputArray: Array): Uin +/* @internal */ +export function encodeUint128 (inputVal: bigint): number { + if (inputVal >= 0x10000000000000000000000000000000n) throw "U128s cannot exceed 128 bits"; + const cArrayPointer = wasm.TS_malloc(16 + 8); + const arrayLengthView = new BigUint64Array(wasm.memory.buffer, cArrayPointer, 1); + arrayLengthView[0] = BigInt(16); + const arrayMemoryView = new Uint8Array(wasm.memory.buffer, cArrayPointer + 8, 16); + for (var i = 0; i < 16; i++) arrayMemoryView[i] = Number((inputVal >> BigInt(i)*8n) & 0xffn); + return cArrayPointer; +} /* @internal */ export function encodeUint8Array (inputArray: Uint8Array|null): number { if (inputArray == null) return 0; @@ -210,6 +220,21 @@ export function getArrayLength(arrayPointer: number): number { return Number(len % (2n ** 32n)); } /* @internal */ +export function decodeUint128 (arrayPointer: number, free = true): bigint { + const arraySize = getArrayLength(arrayPointer); + if (arraySize != 16) throw "Need 16 bytes for a uint128"; + const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 8, arraySize); + var val = 0n; + for (var i = 0; i < 16; i++) { + val <<= 8n; + val |= BigInt(actualArrayViewer[i]!); + } + if (free) { + wasm.TS_free(arrayPointer); + } + return val; +} +/* @internal */ export function decodeUint8Array (arrayPointer: number, free = true): Uint8Array { const arraySize = getArrayLength(arrayPointer); const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 8, arraySize); @@ -678,6 +703,7 @@ import * as bindings from '../bindings.mjs' self.file_ext = ".mts" self.ptr_c_ty = "uint64_t" self.ptr_native_ty = "bigint" + self.u128_native_ty = "bigint" self.usize_c_ty = "uint32_t" self.usize_native_ty = "number" self.native_zero_ptr = "0n" @@ -690,7 +716,7 @@ import * as bindings from '../bindings.mjs' return None def create_native_arr_call(self, arr_len, ty_info): if ty_info.c_ty == "ptrArray": - assert ty_info.rust_obj == "LDKCVec_u5Z" or (ty_info.subty is not None and ty_info.subty.c_ty.endswith("Array")) + assert ty_info.rust_obj == "LDKCVec_U5Z" or (ty_info.subty is not None and ty_info.subty.c_ty.endswith("Array")) return "init_" + ty_info.c_ty + "(" + arr_len + ", __LINE__)" def set_native_arr_contents(self, arr_name, arr_len, ty_info): if ty_info.c_ty == "int8_tArray": @@ -721,7 +747,7 @@ import * as bindings from '../bindings.mjs' return "FREE(" + arr_name + ")" def map_hu_array_elems(self, arr_name, conv_name, arr_ty, elem_ty): - if elem_ty.rust_obj == "LDKu5": + if elem_ty.rust_obj == "LDKU5": return arr_name + " != null ? bindings.uint5ArrToBytes(" + arr_name + ") : null" assert elem_ty.c_ty == "uint64_t" or elem_ty.c_ty.endswith("Array") return arr_name + " != null ? " + arr_name + ".map(" + conv_name + " => " + elem_ty.from_hu_conv[0] + ") : null" @@ -748,7 +774,7 @@ import * as bindings from '../bindings.mjs' return "bindings.getU32ArrayElem(" + arr_name + ", " + idx + ")" elif elem_ty.c_ty == "uint64_t": return "bindings.getU64ArrayElem(" + arr_name + ", " + idx + ")" - elif elem_ty.rust_obj == "LDKu5": + elif elem_ty.rust_obj == "LDKU5": return "bindings.getU8ArrayElem(" + arr_name + ", " + idx + ")" else: assert False @@ -760,6 +786,8 @@ import * as bindings from '../bindings.mjs' def primitive_arr_from_hu(self, arr_ty, fixed_len, arr_name): mapped_ty = arr_ty.subty inner = arr_name + if arr_ty.rust_obj == "LDKU128": + return ("bindings.encodeUint128(" + inner + ")", "") if fixed_len is not None: assert mapped_ty.c_ty == "int8_t" inner = "bindings.check_arr_len(" + arr_name + ", " + fixed_len + ")" @@ -777,7 +805,9 @@ import * as bindings from '../bindings.mjs' def primitive_arr_to_hu(self, arr_ty, fixed_len, arr_name, conv_name): mapped_ty = arr_ty.subty - if mapped_ty.c_ty == "uint8_t" or mapped_ty.c_ty == "int8_t": + if arr_ty.rust_obj == "LDKU128": + return "const " + conv_name + ": bigint = bindings.decodeUint128(" + arr_name + ");" + elif mapped_ty.c_ty == "uint8_t" or mapped_ty.c_ty == "int8_t": return "const " + conv_name + ": Uint8Array = bindings.decodeUint8Array(" + arr_name + ");" elif mapped_ty.c_ty == "uint64_t" or mapped_ty.c_ty == "int64_t": return "const " + conv_name + ": bigint[] = bindings.decodeUint64Array(" + arr_name + ");"