// 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-2007 Marc Lehmann This file is part of GVPE. GVPE 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 gvpe; if not, write to the Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #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