X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=ts%2Fstructs%2FChannelMonitor.ts;h=0d9ad3966158dc22cb2955ad1256e9387bbd4636;hb=9e8763c71cd61d55be7c869d973524f75209a3f3;hp=9c3bc931c38090ebffef8134e28289e1e7064a48;hpb=acecce750cf1159a51f9d1a4dbfd717520739e92;p=ldk-java diff --git a/ts/structs/ChannelMonitor.ts b/ts/structs/ChannelMonitor.ts index 9c3bc931..0d9ad396 100644 --- a/ts/structs/ChannelMonitor.ts +++ b/ts/structs/ChannelMonitor.ts @@ -18,6 +18,13 @@ import * as bindings from '../bindings' // TODO: figure out location bindings.ChannelMonitor_free(this.ptr); } } + public ChannelMonitor clone() { + number ret = bindings.ChannelMonitor_clone(this.ptr); + const ret_hu_conv: ChannelMonitor = new ChannelMonitor(null, ret); + ret_hu_conv.ptrs_to.add(this); + return ret_hu_conv; + } + public Uint8Array write() { Uint8Array ret = bindings.ChannelMonitor_write(this.ptr); return ret; @@ -41,9 +48,13 @@ import * as bindings from '../bindings' // TODO: figure out location public TwoTuple get_funding_txo() { number ret = bindings.ChannelMonitor_get_funding_txo(this.ptr); number ret_a = bindings.LDKC2Tuple_OutPointScriptZ_get_a(ret); - const ret_a_hu_conv: OutPoint = new OutPoint(null, ret_a);; + const ret_a_hu_conv: OutPoint = new OutPoint(null, ret_a); + ret_a_hu_conv.ptrs_to.add(this);; Uint8Array ret_b = bindings.LDKC2Tuple_OutPointScriptZ_get_b(ret); - TwoTuple ret_conv = new TwoTuple(ret_a_hu_conv, ret_b); + TwoTuple ret_conv = new TwoTuple(ret_a_hu_conv, ret_b, () -> { + bindings.C2Tuple_OutPointScriptZ_free(ret); + }); + ret_a_hu_conv.ptrs_to.add(ret_conv); return ret_conv; } @@ -53,6 +64,7 @@ import * as bindings from '../bindings' // TODO: figure out location for (int o = 0; o < ret.length; o++) { number arr_conv_14 = ret[o]; const arr_conv_14_hu_conv: MonitorEvent = new MonitorEvent(null, arr_conv_14); + arr_conv_14_hu_conv.ptrs_to.add(this); arr_conv_14_arr[o] = arr_conv_14_hu_conv; } return arr_conv_14_arr; @@ -77,7 +89,7 @@ import * as bindings from '../bindings' // TODO: figure out location } public TwoTuple[]>[] block_connected(Uint8Array header, TwoTuple[] txdata, number height, BroadcasterInterface broadcaster, FeeEstimator fee_estimator, Logger logger) { - number[] ret = bindings.ChannelMonitor_block_connected(this.ptr, header, (number[])Arrays.stream(txdata).map(arr_conv_30 -> bindings.C2Tuple_usizeTransactionZ_new(arr_conv_30.a, arr_conv_30.b)).toArray(), height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr); + number[] ret = bindings.ChannelMonitor_block_connected(this.ptr, header, Arrays.stream(txdata).map(arr_conv_30 -> bindings.C2Tuple_usizeTransactionZ_new(arr_conv_30.a, arr_conv_30.b)).toArray(number[]::new), height, broadcaster == null ? 0 : broadcaster.ptr, fee_estimator == null ? 0 : fee_estimator.ptr, logger == null ? 0 : logger.ptr); TwoTuple[]>[] arr_conv_49_arr = new TwoTuple[ret.length]; for (int x = 0; x < ret.length; x++) { number arr_conv_49 = ret[x]; @@ -87,12 +99,16 @@ import * as bindings from '../bindings' // TODO: figure out location for (int z = 0; z < arr_conv_49_b.length; z++) { number arr_conv_25 = arr_conv_49_b[z]; number arr_conv_25_a = bindings.LDKC2Tuple_u32TxOutZ_get_a(arr_conv_25); - number arr_conv_25_b = bindings.LDKC2Tuple_u32TxOutZ_get_b(arr_conv_25); + number arr_conv_25_b = bindings.TxOut_clone(bindings.LDKC2Tuple_u32TxOutZ_get_b(arr_conv_25)); TxOut arr_conv_25_b_conv = new TxOut(null, arr_conv_25_b);; - TwoTuple arr_conv_25_conv = new TwoTuple(arr_conv_25_a, arr_conv_25_b_conv); + TwoTuple arr_conv_25_conv = new TwoTuple(arr_conv_25_a, arr_conv_25_b_conv, () -> { + bindings.C2Tuple_u32TxOutZ_free(arr_conv_25); + }); + arr_conv_25_b_conv.ptrs_to.add(arr_conv_25_conv); arr_conv_25_arr[z] = arr_conv_25_conv; }; TwoTuple[]> arr_conv_49_conv = new TwoTuple[]>(arr_conv_49_a, arr_conv_25_arr); + // Warning: We may not free the C tuple object! arr_conv_49_arr[x] = arr_conv_49_conv; } /* TODO 2 TwoTuple */;