// THIS IS A GENERATED FILE: RUN callback.pl to regenerate it // THIS IS A GENERATED FILE: callback.pl is part of the GVPE // THIS IS A GENERATED FILE: distribution. /* * callback.h -- C++ callback mechanism * Copyright (C) 2003-2008 Marc Lehmann * * This file is part of GVPE. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see . * * Additional permission under GNU GPL version 3 section 7 * * If you modify this Program, or any covered work, by linking or * combining it with the OpenSSL project's OpenSSL library (or a modified * version of that library), containing parts covered by the terms of the * OpenSSL or SSLeay licenses, the licensors of this Program grant you * additional permission to convey the resulting work. Corresponding * Source for a non-source form of such a combination shall include the * source code for the parts of OpenSSL used as well as that of the * covered work. */ #ifndef CALLBACK_H__ #define CALLBACK_H__ #define CALLBACK_H_VERSION 3 template struct callback; template struct callback { typedef R (*ptr_type)(void *self); template void set (K *object) { self = object; func = thunk; } R call () const { return func (self); } R operator ()() const { return call (); } private: void *self; ptr_type func; template static R thunk (void *self) { klass *obj = static_cast(self); return (obj->*method) (); } }; template struct callback { typedef R (*ptr_type)(void *self, A1); template void set (K *object) { self = object; func = thunk; } R call (A1 a1) const { return func (self, a1); } R operator ()(A1 a1) const { return call (a1); } private: void *self; ptr_type func; template static R thunk (void *self, A1 a1) { klass *obj = static_cast(self); return (obj->*method) (a1); } }; template struct callback { typedef R (*ptr_type)(void *self, A1, A2); template void set (K *object) { self = object; func = thunk; } R call (A1 a1, A2 a2) const { return func (self, a1, a2); } R operator ()(A1 a1, A2 a2) const { return call (a1, a2); } private: void *self; ptr_type func; template static R thunk (void *self, A1 a1, A2 a2) { klass *obj = static_cast(self); return (obj->*method) (a1, a2); } }; template struct callback { typedef R (*ptr_type)(void *self, A1, A2, A3); template void set (K *object) { self = object; func = thunk; } R call (A1 a1, A2 a2, A3 a3) const { return func (self, a1, a2, a3); } R operator ()(A1 a1, A2 a2, A3 a3) const { return call (a1, a2, a3); } private: void *self; ptr_type func; template static R thunk (void *self, A1 a1, A2 a2, A3 a3) { klass *obj = static_cast(self); return (obj->*method) (a1, a2, a3); } }; template struct callback { typedef R (*ptr_type)(void *self, A1, A2, A3, A4); template void set (K *object) { self = object; func = thunk; } R call (A1 a1, A2 a2, A3 a3, A4 a4) const { return func (self, a1, a2, a3, a4); } R operator ()(A1 a1, A2 a2, A3 a3, A4 a4) const { return call (a1, a2, a3, a4); } private: void *self; ptr_type func; template static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4) { klass *obj = static_cast(self); return (obj->*method) (a1, a2, a3, a4); } }; template struct callback { typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5); template void set (K *object) { self = object; func = thunk; } R call (A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { return func (self, a1, a2, a3, a4, a5); } R operator ()(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { return call (a1, a2, a3, a4, a5); } private: void *self; ptr_type func; template static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { klass *obj = static_cast(self); return (obj->*method) (a1, a2, a3, a4, a5); } }; template struct callback { typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6); template void set (K *object) { self = object; func = thunk; } R call (A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { return func (self, a1, a2, a3, a4, a5, a6); } R operator ()(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { return call (a1, a2, a3, a4, a5, a6); } private: void *self; ptr_type func; template static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { klass *obj = static_cast(self); return (obj->*method) (a1, a2, a3, a4, a5, a6); } }; template struct callback { typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7); template void set (K *object) { self = object; func = thunk; } R call (A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const { return func (self, a1, a2, a3, a4, a5, a6, a7); } R operator ()(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const { return call (a1, a2, a3, a4, a5, a6, a7); } private: void *self; ptr_type func; template static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { klass *obj = static_cast(self); return (obj->*method) (a1, a2, a3, a4, a5, a6, a7); } }; template struct callback { typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7, A8); template void set (K *object) { self = object; func = thunk; } R call (A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const { return func (self, a1, a2, a3, a4, a5, a6, a7, a8); } R operator ()(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const { return call (a1, a2, a3, a4, a5, a6, a7, a8); } private: void *self; ptr_type func; template static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { klass *obj = static_cast(self); return (obj->*method) (a1, a2, a3, a4, a5, a6, a7, a8); } }; template struct callback { typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7, A8, A9); template void set (K *object) { self = object; func = thunk; } R call (A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) const { return func (self, a1, a2, a3, a4, a5, a6, a7, a8, a9); } R operator ()(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) const { return call (a1, a2, a3, a4, a5, a6, a7, a8, a9); } private: void *self; ptr_type func; template static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { klass *obj = static_cast(self); return (obj->*method) (a1, a2, a3, a4, a5, a6, a7, a8, a9); } }; template struct callback { typedef R (*ptr_type)(void *self, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); template void set (K *object) { self = object; func = thunk; } R call (A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) const { return func (self, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); } R operator ()(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) const { return call (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); } private: void *self; ptr_type func; template static R thunk (void *self, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) { klass *obj = static_cast(self); return (obj->*method) (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); } }; #endif