From 3abc75dfa35fa36c0f5f55cd4aed4d443620b3a9 Mon Sep 17 00:00:00 2001 From: Jose Bollo Date: Wed, 2 Jan 2019 17:38:00 +0100 Subject: [PATCH] c++: Add verb initialisation for C++ This new constexpr initialisation method accepts a callback receiving a afb::req instead of a afb_req_t. Change-Id: I752e670b5545a9d7956987984e725b468196a6e9 Signed-off-by: Jose Bollo --- bindings/tutorial/tuto-3.cpp | 9 +++------ include/afb/c++/binding-wrap.hpp | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/bindings/tutorial/tuto-3.cpp b/bindings/tutorial/tuto-3.cpp index 66f8e83a..8ad69ef3 100644 --- a/bindings/tutorial/tuto-3.cpp +++ b/bindings/tutorial/tuto-3.cpp @@ -6,11 +6,10 @@ afb::event event_login, event_logout; -void login(afb_req_t r) +void login(afb::req req) { json_object *args, *user, *passwd; char *usr; - afb::req req(r); args = req.json(); if (!json_object_object_get_ex(args, "user", &user) @@ -33,11 +32,10 @@ void login(afb_req_t r) } } -void action(afb_req_t r) +void action(afb::req req) { json_object *args, *val; char *usr; - afb::req req(r); args = req.json(); // usr = (char*)req.context_get(); @@ -57,10 +55,9 @@ usr = nullptr; req.success(json_object_get(args)); } -void logout(afb_req_t r) +void logout(afb::req req) { char *usr; - afb::req req(r); // usr = (char*)req.context_get(); usr = nullptr; diff --git a/include/afb/c++/binding-wrap.hpp b/include/afb/c++/binding-wrap.hpp index 0a5a5e25..8eddc58b 100644 --- a/include/afb/c++/binding-wrap.hpp +++ b/include/afb/c++/binding-wrap.hpp @@ -571,6 +571,40 @@ constexpr afb_verb_t verb( return r; } +#if AFB_BINDING_VERSION >= 3 +void __afb__verb__cb__for__global__(afb_req_t r) +{ + void *vcbdata; + void (*callback)(req); + + vcbdata = afb_req_get_vcbdata(r); + callback = reinterpret_cast(vcbdata); + callback(req(r)); +} + +constexpr afb_verb_t verb( + const char *name, + void (&callback)(req), + const char *info = nullptr, + uint16_t session = 0, + const afb_auth *auth = nullptr + , + bool glob = false, + void *vcbdata = nullptr +) +{ + return verb( + name, + __afb__verb__cb__for__global__, + info, + session, + auth, + glob, + reinterpret_cast(&callback) + ); +} +#endif + constexpr afb_verb_t verbend() { afb_verb_t r = verb(nullptr, nullptr); -- 2.16.6