Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed by
Diff: FunctionPointer.h
- Revision:
- 4:5d1359a283bc
- Parent:
- 3:aefd12a1f1c5
- Child:
- 9:cf0d45ce28a6
diff -r aefd12a1f1c5 -r 5d1359a283bc FunctionPointer.h --- a/FunctionPointer.h Fri Nov 14 15:25:20 2008 +0000 +++ b/FunctionPointer.h Thu Nov 27 16:23:24 2008 +0000 @@ -1,86 +1,86 @@ -/* mbed Microcontroller Library - FunctionPointer - * Copyright (c) 2007-2008, sford - */ - -#ifndef MBED_FUNCTIONPOINTER_H -#define MBED_FUNCTIONPOINTER_H - -#include "string.h" - -namespace mbed { - -/* Class FunctionPointer - * A class for storing and calling a pointer to a static or member void function - */ -class FunctionPointer { - -public: - - /* Constructor FunctionPointer - * Create a FunctionPointer, attaching a static function - * - * Variables - * function - The void static function to attach (default is none) - */ - FunctionPointer(void (*function)(void) = 0); - - /* Constructor FunctionPointer - * Create a FunctionPointer, attaching a member function - * - * Variables - * object - The object pointer to invoke the member function on (i.e. the this pointer) - * function - The address of the void member function to attach - */ - template<typename T> - FunctionPointer(T *object, void (T::*member)(void)) { - attach(object, member); - } - - /* Function attach - * Attach a static function - * - * Variables - * function - The void static function to attach (default is none) - */ - void attach(void (*function)(void) = 0); - - /* Function attach - * Attach a member function - * - * Variables - * object - The object pointer to invoke the member function on (i.e. the this pointer) - * function - The address of the void member function to attach - */ - template<typename T> - void attach(T *object, void (T::*member)(void)) { - _object = static_cast<void*>(object); - memcpy(_member, (char*)&member, sizeof(member)); - _membercaller = &FunctionPointer::membercaller<T>; - _function = 0; - } - - /* Function call - * Call the attached static or member function - */ - void call(); - -private: - - template<typename T> - static void membercaller(void *object, char *member) { - T* o = static_cast<T*>(object); - void (T::*m)(void); - memcpy((char*)&m, member, sizeof(m)); - (o->*m)(); - } - - void (*_function)(void); // static function pointer - 0 if none attached - void *_object; // object this pointer - 0 if none attached - char _member[16]; // raw member function pointer storage - converted back by registered _membercaller - void (*_membercaller)(void*, char*); // registered membercaller function to convert back and call _member on _object - -}; - -} - -#endif +/* mbed Microcontroller Library - FunctionPointer + * Copyright (c) 2007-2008, sford + */ + +#ifndef MBED_FUNCTIONPOINTER_H +#define MBED_FUNCTIONPOINTER_H + +#include "string.h" + +namespace mbed { + +/* Class FunctionPointer + * A class for storing and calling a pointer to a static or member void function + */ +class FunctionPointer { + +public: + + /* Constructor FunctionPointer + * Create a FunctionPointer, attaching a static function + * + * Variables + * function - The void static function to attach (default is none) + */ + FunctionPointer(void (*function)(void) = 0); + + /* Constructor FunctionPointer + * Create a FunctionPointer, attaching a member function + * + * Variables + * object - The object pointer to invoke the member function on (i.e. the this pointer) + * function - The address of the void member function to attach + */ + template<typename T> + FunctionPointer(T *object, void (T::*member)(void)) { + attach(object, member); + } + + /* Function attach + * Attach a static function + * + * Variables + * function - The void static function to attach (default is none) + */ + void attach(void (*function)(void) = 0); + + /* Function attach + * Attach a member function + * + * Variables + * object - The object pointer to invoke the member function on (i.e. the this pointer) + * function - The address of the void member function to attach + */ + template<typename T> + void attach(T *object, void (T::*member)(void)) { + _object = static_cast<void*>(object); + memcpy(_member, (char*)&member, sizeof(member)); + _membercaller = &FunctionPointer::membercaller<T>; + _function = 0; + } + + /* Function call + * Call the attached static or member function + */ + void call(); + +private: + + template<typename T> + static void membercaller(void *object, char *member) { + T* o = static_cast<T*>(object); + void (T::*m)(void); + memcpy((char*)&m, member, sizeof(m)); + (o->*m)(); + } + + void (*_function)(void); // static function pointer - 0 if none attached + void *_object; // object this pointer - 0 if none attached + char _member[16]; // raw member function pointer storage - converted back by registered _membercaller + void (*_membercaller)(void*, char*); // registered membercaller function to convert back and call _member on _object + +}; + +} + +#endif