From: curt Date: Wed, 10 Apr 2002 17:51:34 +0000 (+0000) Subject: Let's try it again, with the correct file name this time. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=eda75b6d9bf62d95a341e40a6ac8cde5a2a51f82;p=flightgear.git Let's try it again, with the correct file name this time. --- diff --git a/src/Include/Makefile.am b/src/Include/Makefile.am index 6764b99aa..fd432745d 100644 --- a/src/Include/Makefile.am +++ b/src/Include/Makefile.am @@ -3,6 +3,7 @@ EXTRA_DIST = \ config.h.in \ config.h-msvc6 \ cmdargs.h \ + fg_callback.hxx \ fg_typedefs.h \ fg_stl_config.h \ general.hxx diff --git a/src/Include/fg_callback.h b/src/Include/fg_callback.h deleted file mode 100644 index 5b0f112a9..000000000 --- a/src/Include/fg_callback.h +++ /dev/null @@ -1,178 +0,0 @@ -/************************************************************************** - * fg_callback.hxx -- Wrapper classes to treat function and method pointers - * as objects. - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id$ - **************************************************************************/ - -#ifndef _FG_CALLBACK_HXX -#define _FG_CALLBACK_HXX - -// -dw- need size_t for params() function -#ifdef __MWERKS__ -typedef unsigned long size_t; -#endif - - -//----------------------------------------------------------------------------- -// -// Abstract base class for all FlightGear callbacks. -// -class fgCallback -{ -public: - virtual ~fgCallback() {} - - virtual fgCallback* clone() const = 0; - virtual void* call( void** ) = 0; - - size_t params() const { return n_params; } - -protected: - fgCallback( size_t params ) - : n_params(params) {} - -protected: - // The number of parameters to pass to the callback routine. - size_t n_params; - -private: -}; - -//----------------------------------------------------------------------------- -// -// Callback for invoking a file scope function. -// -class fgFunctionCallback : public fgCallback -{ -public: - // Pointer to function taking no arguments and returning void. - typedef void (*Proc0v)(); - - // A callback instance to invoke the function 'p' - fgFunctionCallback( Proc0v p ); - - // Create a clone on the heap. - virtual fgCallback* clone() const; - -private: - void* call( void** in ); - inline void* call0v( void** ); - -private: - // Not defined. - fgFunctionCallback(); - -private: - - typedef void* (fgFunctionCallback::*DoPtr)( void** ); - DoPtr doPtr; - Proc0v proc0v; -}; - -inline -fgFunctionCallback::fgFunctionCallback( Proc0v p ) - : fgCallback(0), - doPtr(&fgFunctionCallback::call0v), - proc0v(p) -{ - // empty -} - -inline fgCallback* -fgFunctionCallback::clone() const -{ - return new fgFunctionCallback( *this ); -} - -inline void* -fgFunctionCallback::call( void** in ) -{ - return (this->*doPtr)( in ); -} - -inline void* -fgFunctionCallback::call0v( void** ) -{ - (*proc0v)(); - return (void*) NULL; -} - -//----------------------------------------------------------------------------- -// -// Callback for invoking an object method. -// -template< class T > -class fgMethodCallback : public fgCallback -{ -public: - // Pointer to method taking no arguments and returning void. - typedef void (T::*Method0v)(); - - // A callback instance to invoke method 'm' of object 'o' - fgMethodCallback( T* o, Method0v m ) - : fgCallback(0), - object(o), - method0v(m), - doPtr(&fgMethodCallback::call0v) {} - - // Create a clone on the heap. - fgCallback* clone() const; - -private: - // - void* call( void** in ); - - // - void* call0v( void** ); - -private: - // Not defined. - fgMethodCallback(); - -private: - T* object; - Method0v method0v; - - // typedef void * (fgMethodCallback::*DoPtr)( void ** ); - typedef void * (fgMethodCallback::*DoPtr)( void ** ); - DoPtr doPtr; -}; - -template< class T > inline fgCallback* -fgMethodCallback::clone() const -{ - return new fgMethodCallback( *this ); -} - -template< class T > inline void* -fgMethodCallback::call( void** in ) -{ - return (this->*doPtr)( in ); -} - - -template< class T > inline void* -fgMethodCallback::call0v( void** ) -{ - (object->*method0v)(); - return (void*) NULL; -} - -#endif // _FG_CALLBACK_HXX - - diff --git a/src/Include/fg_callback.hxx b/src/Include/fg_callback.hxx new file mode 100644 index 000000000..5b0f112a9 --- /dev/null +++ b/src/Include/fg_callback.hxx @@ -0,0 +1,178 @@ +/************************************************************************** + * fg_callback.hxx -- Wrapper classes to treat function and method pointers + * as objects. + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id$ + **************************************************************************/ + +#ifndef _FG_CALLBACK_HXX +#define _FG_CALLBACK_HXX + +// -dw- need size_t for params() function +#ifdef __MWERKS__ +typedef unsigned long size_t; +#endif + + +//----------------------------------------------------------------------------- +// +// Abstract base class for all FlightGear callbacks. +// +class fgCallback +{ +public: + virtual ~fgCallback() {} + + virtual fgCallback* clone() const = 0; + virtual void* call( void** ) = 0; + + size_t params() const { return n_params; } + +protected: + fgCallback( size_t params ) + : n_params(params) {} + +protected: + // The number of parameters to pass to the callback routine. + size_t n_params; + +private: +}; + +//----------------------------------------------------------------------------- +// +// Callback for invoking a file scope function. +// +class fgFunctionCallback : public fgCallback +{ +public: + // Pointer to function taking no arguments and returning void. + typedef void (*Proc0v)(); + + // A callback instance to invoke the function 'p' + fgFunctionCallback( Proc0v p ); + + // Create a clone on the heap. + virtual fgCallback* clone() const; + +private: + void* call( void** in ); + inline void* call0v( void** ); + +private: + // Not defined. + fgFunctionCallback(); + +private: + + typedef void* (fgFunctionCallback::*DoPtr)( void** ); + DoPtr doPtr; + Proc0v proc0v; +}; + +inline +fgFunctionCallback::fgFunctionCallback( Proc0v p ) + : fgCallback(0), + doPtr(&fgFunctionCallback::call0v), + proc0v(p) +{ + // empty +} + +inline fgCallback* +fgFunctionCallback::clone() const +{ + return new fgFunctionCallback( *this ); +} + +inline void* +fgFunctionCallback::call( void** in ) +{ + return (this->*doPtr)( in ); +} + +inline void* +fgFunctionCallback::call0v( void** ) +{ + (*proc0v)(); + return (void*) NULL; +} + +//----------------------------------------------------------------------------- +// +// Callback for invoking an object method. +// +template< class T > +class fgMethodCallback : public fgCallback +{ +public: + // Pointer to method taking no arguments and returning void. + typedef void (T::*Method0v)(); + + // A callback instance to invoke method 'm' of object 'o' + fgMethodCallback( T* o, Method0v m ) + : fgCallback(0), + object(o), + method0v(m), + doPtr(&fgMethodCallback::call0v) {} + + // Create a clone on the heap. + fgCallback* clone() const; + +private: + // + void* call( void** in ); + + // + void* call0v( void** ); + +private: + // Not defined. + fgMethodCallback(); + +private: + T* object; + Method0v method0v; + + // typedef void * (fgMethodCallback::*DoPtr)( void ** ); + typedef void * (fgMethodCallback::*DoPtr)( void ** ); + DoPtr doPtr; +}; + +template< class T > inline fgCallback* +fgMethodCallback::clone() const +{ + return new fgMethodCallback( *this ); +} + +template< class T > inline void* +fgMethodCallback::call( void** in ) +{ + return (this->*doPtr)( in ); +} + + +template< class T > inline void* +fgMethodCallback::call0v( void** ) +{ + (object->*method0v)(); + return (void*) NULL; +} + +#endif // _FG_CALLBACK_HXX + +