Skip to content

Commit ce1b88f

Browse files
authored
Merge pull request #5754 from InsightSoftwareConsortium/swig-generation-minor-refinements
swig generation minor refinements
2 parents 6ae9cc6 + 18014e2 commit ce1b88f

2 files changed

Lines changed: 16 additions & 4 deletions

File tree

Wrapping/Generators/Python/PyBase/pyBase.i

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ from . import _ITKCommonPython
3434
%include <std_set.i>
3535

3636
// must be included in the end to avoid wrong std::string typemaps
37-
%include std_iostream.i
37+
%include <std_iostream.i>
3838

3939
// let str be usable as a template parameter instead of std::string
4040
%pythoncode {

Wrapping/Generators/SwigInterface/igenerator.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,7 @@ def create_idxfile(self, idx_file_path: str, wrappers_namespace):
492492
class SwigInputGenerator:
493493
"""Generates a swig input .i file for an ITK module."""
494494

495+
previously_created_constructors_set = set()
495496
notWrapped = [
496497
r"std::_Deque_alloc<.+>",
497498
r"itk::AtomicInt<.+>",
@@ -1070,13 +1071,16 @@ def generate_class(self, typedef, indent=0):
10701071
w = access not in self.options.access_warnings
10711072

10721073
# iterate over the members
1073-
for member in get_type(typedef).get_members(access=access):
1074+
all_members = list(get_type(typedef).get_members(access=access))
1075+
for member in all_members:
10741076
if isinstance(member, decls.typedef.typedef_t):
10751077
self.warn(
10761078
51, f"Member typedef are not supported: {member.name}", w
10771079
)
10781080
elif isinstance(member, decls.member_function_t):
1079-
self.generate_method(typedef, member, indent, w)
1081+
self.generate_method(
1082+
typedef, member, indent, w, is_operator=False
1083+
)
10801084
elif isinstance(member, decls.constructor_t):
10811085
self.generate_constructor(typedef, member, indent, w)
10821086
elif isinstance(member, decls.member_operator_t):
@@ -1298,6 +1302,14 @@ def generate_constructor(self, typedef, constructor, indent, w):
12981302
# f"(Perhaps RValueReferenceType argument move constructor): {constructor_declaration_str}"
12991303
# )
13001304
return
1305+
if constructor_declaration_str in self.previously_created_constructors_set:
1306+
# print(
1307+
# "WARNING: Duplicate constructor attempted to be written: "
1308+
# f"{constructor_declaration_str} for {typedef.name}"
1309+
# )
1310+
return
1311+
1312+
self.previously_created_constructors_set.add(constructor_declaration_str)
13011313
self.outputFile.write(" " * indent)
13021314
self.outputFile.write(constructor_declaration_str)
13031315

@@ -1333,7 +1345,7 @@ def generate_nested_enum(self, _typedef, enum, indent, _w):
13331345
python_enum_names = [f"{enum.name}_{name.strip()}" for name in content]
13341346
self.classes[self.current_class].enums += python_enum_names
13351347

1336-
def generate_method(self, typedef, method, indent, w, is_operator=False):
1348+
def generate_method(self, typedef, method, indent, w, is_operator):
13371349
self.info(f"Generating interface for method '{typedef.name}::{method.name}'.")
13381350
# avoid the apply method for the class vnl_c_vector: the signature is
13391351
# quite strange and currently confuse swig :-/

0 commit comments

Comments
 (0)