From: Matt Corallo Date: Sun, 12 May 2024 14:47:02 +0000 (+0000) Subject: Support 4-tuples X-Git-Tag: v0.0.123.0^2~12 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;ds=sidebyside;h=a25e4ce2bf1b3c8b750be44fc70328ca8b056228;p=ldk-java Support 4-tuples --- diff --git a/csharp_strings.py b/csharp_strings.py index a73ee203..3e5e247d 100644 --- a/csharp_strings.py +++ b/csharp_strings.py @@ -1179,7 +1179,7 @@ public class {struct_name.replace("LDK","")} : CommonBase {{ out_opaque_struct_human = "" out_opaque_struct_human += self.hu_struct_file_prefix out_opaque_struct_human += "\n/**\n * " + struct_doc_comment.replace("\n", "\n * ") + "\n */\n" - hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDK", "") + hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDKC4Tuple", "FourTuple").replace("LDK", "") out_opaque_struct_human += ("public class " + hu_name + " : CommonBase") if struct_name.startswith("LDKLocked") or struct_name.startswith("LDKReadOnly"): out_opaque_struct_human += (", IDisposable") diff --git a/genbindings.py b/genbindings.py index 3c79bb8f..b92d17ef 100755 --- a/genbindings.py +++ b/genbindings.py @@ -403,6 +403,7 @@ def java_c_types(fn_arg, ret_arr_len): java_hu_ty = java_hu_ty.replace("LDKCResult", "Result") java_hu_ty = java_hu_ty.replace("LDKC2Tuple", "TwoTuple") java_hu_ty = java_hu_ty.replace("LDKC3Tuple", "ThreeTuple") + java_hu_ty = java_hu_ty.replace("LDKC4Tuple", "FourTuple") java_hu_ty = java_hu_ty.replace("LDK", "") fn_ty_arg = "J" fn_arg = ma.group(2).strip() @@ -571,14 +572,17 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}", struct_meth = method_name.rsplit("Z", 1)[0][1:] + "Z" expected_struct = "LDKC" + struct_meth struct_meth_name = method_name[len(struct_meth) + 1:].strip("_") - elif method_name.startswith("C2Tuple") or method_name.startswith("C3Tuple"): + elif method_name.startswith("C2Tuple") or method_name.startswith("C3Tuple") or method_name.startswith("C4Tuple"): tuple_name = method_name.rsplit("Z", 1)[0][2:] + "Z" if method_name.startswith("C2Tuple"): struct_meth = "Two" + tuple_name expected_struct = "LDKC2" + tuple_name - else: + elif method_name.startswith("C3Tuple"): struct_meth = "Three" + tuple_name expected_struct = "LDKC3" + tuple_name + else: + struct_meth = "Four" + tuple_name + expected_struct = "LDKC4" + tuple_name struct_meth_name = method_name[len(tuple_name) + 2:].strip("_") else: struct_meth = method_name.split("_")[0] @@ -666,7 +670,7 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}", not method_name.startswith("_") and method_name != "check_platform" and method_name != "Result_read" and not expected_struct in unitary_enums and - ((not method_name.startswith("C2Tuple_") and not method_name.startswith("C3Tuple_")) + ((not method_name.startswith("C2Tuple_") and not method_name.startswith("C3Tuple_") and not method_name.startswith("C4Tuple_")) or method_name.endswith("_read"))) # If we're adding a static method, and it returns a primitive or an array of primitives, @@ -909,7 +913,7 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}", map_fn_with_ref_option(dummy_line, reg_fn_regex.match(dummy_line), None, None, "", holds_ref) def map_tuple(struct_name, field_lines): - human_ty = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple") + human_ty = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDKC4Tuple", "FourTuple") with open(f"{sys.argv[3]}/structs/{human_ty}{consts.file_ext}", "w") as out_java_struct: out_java_struct.write(consts.map_tuple(struct_name)) ty_list = [] @@ -1008,7 +1012,7 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}", vec_ty_match = line_indicates_vec_regex.match(struct_line) if vec_ty_match is not None and struct_name.startswith("LDKCVec_"): vec_ty = vec_ty_match.group(2) - elif struct_name.startswith("LDKC2Tuple_") or struct_name.startswith("LDKC3Tuple_"): + elif struct_name.startswith("LDKC2Tuple_") or struct_name.startswith("LDKC3Tuple_") or struct_name.startswith("LDKC4Tuple_"): is_tuple = True trait_fn_match = line_indicates_trait_regex.match(struct_line) if trait_fn_match is not None: @@ -1186,7 +1190,7 @@ with open(sys.argv[1]) as in_h, open(f"{sys.argv[2]}/bindings{consts.file_ext}", with open(f"{sys.argv[3]}/structs/{struct_name.replace('LDKCResult', 'Result')}{consts.file_ext}", "a") as out_java_struct: out_java_struct.write("}\n" + consts.hu_struct_file_suffix) for struct_name in tuple_types: - struct_hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple") + struct_hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDKC4Tuple", "FourTuple") with open(f"{sys.argv[3]}/structs/{struct_hu_name}{consts.file_ext}", "a") as out_java_struct: out_java_struct.write("}\n" + consts.hu_struct_file_suffix) diff --git a/java_strings.py b/java_strings.py index b0c100e7..c99e8312 100644 --- a/java_strings.py +++ b/java_strings.py @@ -1390,7 +1390,7 @@ import javax.annotation.Nullable; out_opaque_struct_human += self.hu_struct_file_prefix out_opaque_struct_human += "\n/**\n * " + struct_doc_comment.replace("\n", "\n * ") + "\n */\n" out_opaque_struct_human += "@SuppressWarnings(\"unchecked\") // We correctly assign various generic arrays\n" - hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDK", "") + hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC4Tuple", "FourTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDK", "") out_opaque_struct_human += ("public class " + hu_name + " extends CommonBase") if struct_name.startswith("LDKLocked") or struct_name.startswith("LDKReadOnly"): out_opaque_struct_human += (" implements AutoCloseable") diff --git a/python_strings.py b/python_strings.py index d5157bf0..b4877199 100644 --- a/python_strings.py +++ b/python_strings.py @@ -1291,7 +1291,7 @@ export class {struct_name.replace("LDK","")} extends CommonBase {{ def map_opaque_struct(self, struct_name, struct_doc_comment): method_header = "" - hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDK", "") + hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDKC4Tuple", "FourTuple").replace("LDK", "") out_opaque_struct_human = f"{self.hu_struct_file_prefix}" extra_docs = "" extra_body = "" diff --git a/typescript_strings.py b/typescript_strings.py index afb2b67f..0d8b223e 100644 --- a/typescript_strings.py +++ b/typescript_strings.py @@ -1409,7 +1409,7 @@ export class {struct_name.replace("LDK","")} extends CommonBase {{ def map_opaque_struct(self, struct_name, struct_doc_comment): method_header = "" - hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDK", "") + hu_name = struct_name.replace("LDKC2Tuple", "TwoTuple").replace("LDKC3Tuple", "ThreeTuple").replace("LDKC4Tuple", "FourTuple").replace("LDK", "") out_opaque_struct_human = f"{self.hu_struct_file_prefix}" constructor_body = "super(ptr, bindings." + struct_name.replace("LDK","") + "_free);" extra_docs = ""