diff options
Diffstat (limited to 'tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/function_signature.py')
-rw-r--r-- | tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/function_signature.py | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/function_signature.py b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/function_signature.py new file mode 100644 index 0000000000..d87c8a2e9b --- /dev/null +++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/function_signature.py @@ -0,0 +1,138 @@ +# Copyright (C) 2020 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + + +from option_management import need_separate_output_sequence + + +# ["hallo", "welt"] -> "halloWelt" +def build_camel_case(*args): + assert all(isinstance(x, str) for x in args) + if len(args) == 0: + return "" + if len(args) == 1: + return args[0] + return args[0] + "".join(x.capitalize() for x in args[1:]) + + +def build_function_name(options): + result = [] + for part in ["blocking", "filter", "map", "reduce"]: + if options[part]: + result.append(part) + + def make_potentially_passive(verb): + if verb == "map": + return "mapped" + if verb == "blocking": + return "blocking" + + if verb[-1] == "e": + verb += "d" + else: + verb += "ed" + + return verb + + if not options["inplace"]: + result = [make_potentially_passive(x) for x in result] + + result = build_camel_case(*result) + return result + + +def build_blocking_return_type(options): + if options["inplace"]: + if options["filter"] and options["iterators"] and not options["reduce"]: + return "Iterator" # have to mark new end + else: + return "void" + else: + if options["reduce"]: + return "ResultType" + + if need_separate_output_sequence(options): + return "OutputSequence" + else: + return "Sequence" + + +def build_return_type(options): + if options["blocking"]: + return build_blocking_return_type(options) + else: + return f"QFuture<{build_blocking_return_type(options)}>" + + +def build_template_argument_list(options): + required_types = [] + if options["reduce"]: + required_types.append("typename ResultType") + + need_output_sequence = need_separate_output_sequence(options) + if need_output_sequence: + required_types.append("OutputSequence") + + if options["iterators"]: + required_types.append("Iterator") + else: + if need_output_sequence: + required_types.append("InputSequence") + else: + required_types.append("Sequence") + + # Functors + if options["filter"]: + required_types.append("KeepFunctor") + + if options["map"]: + required_types.append("MapFunctor") + + if options["reduce"]: + required_types.append("ReduceFunctor") + + if options["initialvalue"]: + required_types.append("reductionitemtype") + + return "template<" + ", ".join(["typename "+x for x in required_types]) + ">" + + +def build_argument_list(options): + required_arguments = [] + if options["pool"]: + required_arguments.append("QThreadPool* pool") + + if options["iterators"]: + required_arguments.append("Iterator begin") + required_arguments.append("Iterator end") + else: + if options["inplace"]: + required_arguments.append("Sequence & sequence") + else: + if need_separate_output_sequence(options): + required_arguments.append("InputSequence && sequence") + else: + required_arguments.append("const Sequence & sequence") + + if options["filter"]: + required_arguments.append("KeepFunctor filterFunction") + + if options["map"]: + required_arguments.append("MapFunctor function") + + if options["reduce"]: + required_arguments.append("ReduceFunctor reduceFunction") + if options["initialvalue"]: + required_arguments.append("reductionitemtype && initialValue") + + required_arguments.append("ReduceOptions") + + return "(" + ", ".join(required_arguments) + ")" + + +def build_function_signature(options): + return (build_template_argument_list(options) + "\n" + + build_return_type( + options) + " " + build_function_name(options) + build_argument_list(options) + + ";" + ) |