1<%
2    def parameters(defaultValue=False):
3        return ",\n            ".\
4            join([ parameter(p, defaultValue) for p in signal.properties ])
5
6    def parameter(p, defaultValue=False):
7        r = "%s %s" % (p.cppTypeParam(interface.name), p.camelCase)
8        if defaultValue:
9            r += default_value(p)
10        return r
11
12    def parameters_as_list():
13        return ", ".join([ p.camelCase for p in signal.properties ])
14
15    def parameters_types_as_list():
16        return ", ".join([ p.cppTypeParam(interface.name, full=True)
17                for p in signal.properties ])
18
19    def default_value(p):
20        if p.defaultValue != None:
21            return " = " + str(p.defaultValue)
22        else:
23            return ""
24%>
25###
26### Emit 'header'
27###
28    % if ptype == 'header':
29        /** @brief Send signal '${signal.name}'
30         *
31         *  ${ signal.description.strip() }
32    % if len(signal.properties) != 0:
33         *
34        % for p in signal.properties:
35         *  @param[in] ${p.camelCase} - ${p.description.strip()}
36        % endfor
37    % endif
38         */
39        void ${ signal.camelCase }(
40            ${ parameters(True) });
41###
42### Emit 'callback-cpp'
43###
44    % elif ptype == 'callback-cpp':
45void ${interface.classname}::${ signal.camelCase }(
46            ${ parameters() })
47{
48    auto& i = _${interface.joinedName("_", "interface")};
49    auto m = i.new_signal("${ signal.name }");
50
51    m.append(${ parameters_as_list() });
52    m.signal_send();
53}
54
55namespace details
56{
57namespace ${interface.classname}
58{
59static const auto _signal_${ signal.CamelCase } =
60    % if len(signal.properties) == 0:
61        utility::tuple_to_array(std::make_tuple('\0'));
62    % else:
63        utility::tuple_to_array(message::types::type_id<
64                ${ parameters_types_as_list() }>());
65    % endif
66}
67}
68    % endif
69