diff --git a/codegen/genfacet b/codegen/genfacet index dc8b98a..baea989 100755 --- a/codegen/genfacet +++ b/codegen/genfacet @@ -67,12 +67,18 @@ def format_args_routing(args): names = [p['name'] for p in args] return ', '.join([f"O::data()"] + names[1:]) -def format_args_impl(args, drepr): +def format_args_impl_const(args, drepr): """ Format argument names, for implementation (IFoo_DRepr) """ names = [f"{p['type']} {p['name']}" for p in args] return ', '.join([f"const {drepr} & self"] + names[1:]) +def format_args_impl_nonconst(args, drepr): + """ Format argument names, for implementation (IFoo_DRepr) + """ + names = [f"{p['type']} {p['name']}" for p in args] + return ', '.join([f"{drepr} & self"] + names[1:]) + def gen_facet(env, idl_fname, @@ -480,7 +486,8 @@ def main(): env.filters['argnamesnodata'] = format_arg_names_nodata env.filters['argsnodata'] = format_args_nodata env.filters['argrouting'] = format_args_routing - env.filters['argimpl'] = format_args_impl + env.filters['argimplconst'] = format_args_impl_const + env.filters['argimplnonconst'] = format_args_impl_nonconst if idl['mode'] == 'facet': gen_facet(env=env, diff --git a/codegen/iface_facet_repr.cpp.j2 b/codegen/iface_facet_repr.cpp.j2 index ce3e87b..5249929 100644 --- a/codegen/iface_facet_repr.cpp.j2 +++ b/codegen/iface_facet_repr.cpp.j2 @@ -17,7 +17,7 @@ namespace {{repr_ns1}} { namespace {{repr_ns2}} { {% for md in const_methods %} auto - {{iface_facet_repr}}::{{md.name}}({{md.args | argimpl(data_repr)}}){{md | staticqual}} -> {{md.return_type}} + {{iface_facet_repr}}::{{md.name}}({{md.args | argimplconst(data_repr)}}){{md | staticqual}} -> {{md.return_type}} { {% if md.return_type == "void" %} self.{{md.name}}({{md.args | argnamesnodata}}); @@ -27,6 +27,17 @@ namespace {{repr_ns1}} { } {% endfor %} + {% for md in nonconst_methods %} + auto + {{iface_facet_repr}}::{{md.name}}({{md.args | argimplnonconst(data_repr)}}){{md | staticqual}} -> {{md.return_type}} + { + {% if md.return_type == "void" %} + self.{{md.name}}({{md.args | argnamesnodata}}); + {% else %} + return self.{{md.name}}({{md.args | argnamesnodata}}); + {% endif %} + } + {% endfor %} } /*namespace {{repr_ns2}}*/ } /*namespace {{repr_ns1}}*/ diff --git a/codegen/iface_facet_repr.hpp.j2 b/codegen/iface_facet_repr.hpp.j2 index afbd717..55b7994 100644 --- a/codegen/iface_facet_repr.hpp.j2 +++ b/codegen/iface_facet_repr.hpp.j2 @@ -51,14 +51,16 @@ namespace {{repr_ns1}} { /** @defgroup {{repr_ns2}}-{{facet_name_lc}}-{{data_repr_lc}}-methods **/ ///@{ {% endif %} + // const methods {% for md in const_methods %} /** {{md.doc}} **/ - static {{md.return_type}} {{md.name}}({{md.args | argimpl(data_repr)}}){{md | staticqual}}; + static {{md.return_type}} {{md.name}}({{md.args | argimplconst(data_repr)}}){{md | staticqual}}; {% endfor %} - {% for md in methods %} + // non-const methods + {% for md in nonconst_methods %} /** {{md.doc}} **/ - static {{md.return_type}} {{md.name}}({{md.args | argimpl(data_repr)}}){{md | staticqual}}; + static {{md.return_type}} {{md.name}}({{md.args | argimplnonconst(data_repr)}}){{md | staticqual}}; {% endfor %} {% if using_dox %} ///@}