From 23d2bf84a3741a375050d390fa99afeca43a07c4 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Thu, 21 Jan 2010 14:42:08 +0100 Subject: [PATCH] Added a METHOD2() macro that implements a method for two different interfaces --- src/libstrongswan/utils.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libstrongswan/utils.h b/src/libstrongswan/utils.h index e744f39..964cbd1 100644 --- a/src/libstrongswan/utils.h +++ b/src/libstrongswan/utils.h @@ -123,7 +123,17 @@ * _name is provided a function pointer, but will get optimized out by GCC. */ #define METHOD(iface, name, ret, this, ...) \ - static ret name(union {iface *_public; this;} __attribute__((transparent_union)), ##__VA_ARGS__); \ + static ret name(union {iface *_public; this;} \ + __attribute__((transparent_union)), ##__VA_ARGS__); \ + const static typeof(name) *_##name = (const typeof(name)*)name; \ + static ret name(this, ##__VA_ARGS__) + +/** + * Same as METHOD(), but is defined for two public interfaces. + */ +#define METHOD2(iface1, iface2, name, ret, this, ...) \ + static ret name(union {iface1 *_public1; iface2 *_public2; this;} \ + __attribute__((transparent_union)), ##__VA_ARGS__); \ const static typeof(name) *_##name = (const typeof(name)*)name; \ static ret name(this, ##__VA_ARGS__) -- 2.7.4