33#define g_name2(a, b) gEnErIc2(a, b)
34#define gEnErIc2(a, b) a##b
36#define g_name3(a, b, c) gEnErIc3(a, b, c)
37#define gEnErIc3(a, b, c) a##b##c
39#define g_name4(a, b, c, d) gEnErIc4(a, b, c, d)
40#define gEnErIc4(a, b, c, d) a##b##c##d
42#define GENERIC_STRING(a) gEnErIcStRiNg(a)
43#define gEnErIcStRiNg(a) #a
45#define g_declare(clas, t) g_name2(clas, declare)(t)
46#define g_declare2(clas, t1, t2) g_name2(clas, declare2)(t1, t2)
48#define g_implement(clas, t) g_name2(clas, implement)(t)
49#define g_implement2(clas, t1, t2) g_name2(clas, implement2)(t1, t2)
52typedef int (*
GPT)(int,
char*);
54#define g_set_handler(gen, type, x) g_name4(set_, type, gen, _handler)(x)
56#define g_errorhandler(gen, type) g_name3(type, gen, handler)
58#define g_callerror(gen, type, a, b) (*g_errorhandler(gen, type))(a, b)
For temporary backward namespace compatibility, use casa as alias for casacore.
int(* GPT)(int, char *)
extern genericerror(int,char*);