Add vtable support
The sd-bus interfaces for creating a VTABLE require C-only syntax, which
prevents them from being used in C++ code. Create constexpr wrappers
that emit VTABLE entries so that a VTABLE can be created in C++ code.
Change-Id: I22892de1e87448ab9dce48034c9f030bc5bab9af
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/test/vtable/vtable.cpp b/test/vtable/vtable.cpp
new file mode 100644
index 0000000..8b11366
--- /dev/null
+++ b/test/vtable/vtable.cpp
@@ -0,0 +1,30 @@
+#include <sdbusplus/vtable.hpp>
+#include <cassert>
+
+static const sdbusplus::vtable::vtable_t example[] =
+ {
+ sdbusplus::vtable::start(),
+ sdbusplus::vtable::method((const char*)1, (const char*)2,
+ (const char*)3,
+ (sd_bus_message_handler_t)4),
+ sdbusplus::vtable::signal((const char*)5, (const char*)6),
+ sdbusplus::vtable::property((const char*)7, (const char*)8,
+ (sd_bus_property_get_t)9,
+ sdbusplus::vtable::property_::const_),
+ sdbusplus::vtable::property((const char*)10, (const char*)11,
+ (sd_bus_property_get_t)12,
+ (sd_bus_property_set_t)13),
+ sdbusplus::vtable::property_o((const char*)14, (const char*)15, 16),
+ sdbusplus::vtable::end()
+ };
+
+extern const sd_bus_vtable example2[];
+extern const size_t example2_size;
+
+int main(int argc, char** argv)
+{
+ assert(sizeof(example) == example2_size);
+ assert(0 == memcmp(example, example2, example2_size));
+
+ return 0;
+};
diff --git a/test/vtable/vtable_c.c b/test/vtable/vtable_c.c
new file mode 100644
index 0000000..442d6c7
--- /dev/null
+++ b/test/vtable/vtable_c.c
@@ -0,0 +1,21 @@
+#include <systemd/sd-bus.h>
+
+
+const sd_bus_vtable example2[] =
+ {
+ SD_BUS_VTABLE_START(0),
+ SD_BUS_METHOD((const char*)1, (const char*)2,
+ (const char*)3, (sd_bus_message_handler_t)4, 0),
+ SD_BUS_SIGNAL((const char*)5, (const char*)6, 0),
+ SD_BUS_PROPERTY((const char*)7, (const char*)8,
+ (sd_bus_property_get_t)9, 0,
+ SD_BUS_VTABLE_PROPERTY_CONST),
+ SD_BUS_WRITABLE_PROPERTY((const char*)10, (const char*)11,
+ (sd_bus_property_get_t)12,
+ (sd_bus_property_set_t)13, 0, 0),
+ SD_BUS_PROPERTY((const char*)14, (const char*)15, NULL, 16, 0),
+ SD_BUS_VTABLE_END,
+ };
+
+const size_t example2_size = sizeof(example2);
+