sdbus++: simplify vtable generation

Move vtable generation into separate mako files to simplify all of
the "*.prototype.hpp.mako" files.

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I2700698d760a25b649e86d812e425e66c9ff30a2
diff --git a/tools/meson.build b/tools/meson.build
index 41d0bb6..30ce47f 100644
--- a/tools/meson.build
+++ b/tools/meson.build
@@ -21,11 +21,14 @@
   'sdbusplus/templates/method.md.mako',
   'sdbusplus/templates/method.client.hpp.mako',
   'sdbusplus/templates/method.prototype.hpp.mako',
+  'sdbusplus/templates/method.server.vtable.cpp.mako',
   'sdbusplus/templates/property.md.mako',
   'sdbusplus/templates/property.client.hpp.mako',
   'sdbusplus/templates/property.server.cpp.mako',
+  'sdbusplus/templates/property.server.vtable.cpp.mako',
   'sdbusplus/templates/signal.md.mako',
   'sdbusplus/templates/signal.prototype.hpp.mako',
+  'sdbusplus/templates/signal.server.vtable.cpp.mako',
 )
 meson.override_find_program('sdbus++', files('sdbus++'))
 sdbusplusplus_prog = find_program('sdbus++', native: true)
diff --git a/tools/sdbusplus/templates/interface.server.cpp.mako b/tools/sdbusplus/templates/interface.server.cpp.mako
index eb8ca64..0562361 100644
--- a/tools/sdbusplus/templates/interface.server.cpp.mako
+++ b/tools/sdbusplus/templates/interface.server.cpp.mako
@@ -57,25 +57,15 @@
 
 const vtable_t ${interface.classname}::_vtable[] = {
     vtable::start(),
+
     % for m in interface.methods:
-${ m.cpp_prototype(loader, interface=interface, ptype='vtable') }
+${ m.render(loader, "method.server.vtable.cpp.mako", method=m, interface=interface) }
     % endfor
     % for s in interface.signals:
-${ s.cpp_prototype(loader, interface=interface, ptype='vtable') }
+${ s.render(loader, "signal.server.vtable.cpp.mako", signal=s, interface=interface) }
     % endfor
     % for p in interface.properties:
-    vtable::property("${p.name}",
-                     details::${interface.classname}::_property_${p.name}
-                        .data(),
-                     _callback_get_${p.name},
-        % if 'const' not in p.flags and 'readonly' not in p.flags:
-                     _callback_set_${p.name},
-        % endif
-        % if not p.cpp_flags:
-                     vtable::property_::emits_change),
-        % else:
-                     ${p.cpp_flags}),
-        % endif
+${ p.render(loader, "property.server.vtable.cpp.mako", property=p, interface=interface) }
     % endfor
     vtable::end()
 };
diff --git a/tools/sdbusplus/templates/method.prototype.hpp.mako b/tools/sdbusplus/templates/method.prototype.hpp.mako
index 6cfe02d..74d0cbc 100644
--- a/tools/sdbusplus/templates/method.prototype.hpp.mako
+++ b/tools/sdbusplus/templates/method.prototype.hpp.mako
@@ -29,21 +29,6 @@
         static int _callback_${ method.CamelCase }(
             sd_bus_message*, void*, sd_bus_error*);
 ###
-### Emit 'vtable'
-###
-    % elif ptype == 'vtable':
-    vtable::method("${method.name}",
-                   details::${interface.classname}::_param_${ method.CamelCase }
-                        .data(),
-                   details::${interface.classname}::_return_${ method.CamelCase }
-                        .data(),
-        % if method.cpp_flags:
-                   _callback_${method.CamelCase},
-                   ${method.cpp_flags}),
-        % else:
-                   _callback_${method.CamelCase}),
-        % endif
-###
 ### Emit 'callback-cpp'
 ###
     % elif ptype == 'callback-cpp':
diff --git a/tools/sdbusplus/templates/method.server.vtable.cpp.mako b/tools/sdbusplus/templates/method.server.vtable.cpp.mako
new file mode 100644
index 0000000..3774ab4
--- /dev/null
+++ b/tools/sdbusplus/templates/method.server.vtable.cpp.mako
@@ -0,0 +1,10 @@
+    vtable::method("${method.name}",
+                   details::${interface.classname}::_param_${ method.CamelCase }.data(),
+                   details::${interface.classname}::_return_${ method.CamelCase }.data(),
+        % if method.cpp_flags:
+                   _callback_${method.CamelCase},
+                   ${method.cpp_flags}\
+        % else:
+                   _callback_${method.CamelCase}\
+        % endif
+),
diff --git a/tools/sdbusplus/templates/property.server.vtable.cpp.mako b/tools/sdbusplus/templates/property.server.vtable.cpp.mako
new file mode 100644
index 0000000..f21a6cc
--- /dev/null
+++ b/tools/sdbusplus/templates/property.server.vtable.cpp.mako
@@ -0,0 +1,12 @@
+    vtable::property("${property.name}",
+                     details::${interface.classname}::_property_${property.name}.data(),
+                     _callback_get_${property.name},
+        % if 'const' not in property.flags and 'readonly' not in property.flags:
+                     _callback_set_${property.name},
+        % endif
+        % if not property.cpp_flags:
+                     vtable::property_::emits_change\
+        % else:
+                     ${property.cpp_flags}\
+        % endif
+),
diff --git a/tools/sdbusplus/templates/signal.prototype.hpp.mako b/tools/sdbusplus/templates/signal.prototype.hpp.mako
index 78c838c..10fae50 100644
--- a/tools/sdbusplus/templates/signal.prototype.hpp.mako
+++ b/tools/sdbusplus/templates/signal.prototype.hpp.mako
@@ -40,13 +40,6 @@
         void ${ signal.camelCase }(
             ${ parameters(True) });
 ###
-### Emit 'vtable'
-###
-    % elif ptype == 'vtable':
-    vtable::signal("${signal.name}",
-                   details::${interface.classname}::_signal_${signal.CamelCase }
-                        .data()),
-###
 ### Emit 'callback-cpp'
 ###
     % elif ptype == 'callback-cpp':
diff --git a/tools/sdbusplus/templates/signal.server.vtable.cpp.mako b/tools/sdbusplus/templates/signal.server.vtable.cpp.mako
new file mode 100644
index 0000000..d9caf4b
--- /dev/null
+++ b/tools/sdbusplus/templates/signal.server.vtable.cpp.mako
@@ -0,0 +1,2 @@
+    vtable::signal("${signal.name}",
+                   details::${interface.classname}::_signal_${signal.CamelCase }.data()),