Fork of the official mbed C/C SDK provides the software platform and libraries to build your applications for RenBED.
Dependents: 1-RenBuggyTimed RenBED_RGB RenBED_RGB_PWM RenBED_RGB
Fork of mbed by
Diff: FunctionPointer.h
- Revision:
- 43:e2ed12d17f06
- Parent:
- 27:7110ebee3484
- Child:
- 44:24d45a770a51
--- a/FunctionPointer.h Wed Aug 29 12:44:47 2012 +0100 +++ b/FunctionPointer.h Fri Oct 26 17:40:46 2012 +0100 @@ -9,76 +9,77 @@ namespace mbed { -/* Class FunctionPointer - * A class for storing and calling a pointer to a static or member void function +/** 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); + /** Create a FunctionPointer, attaching a static function + * + * @param 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); - } + /** Create a FunctionPointer, attaching a member function + * + * @param object The object pointer to invoke the member function on (i.e. the this pointer) + * @param 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); + /** Attach a static function + * + * @param function The void static function to attach (default is none) + */ + void attach(void (*function)(void) = 0); + + /** Attach a member function + * + * @param object The object pointer to invoke the member function on (i.e. the this pointer) + * @param 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; - } + _membercaller = &FunctionPointer::membercaller<T>; + _function = 0; + } - /* Function call - * Call the attached static or member function - */ - void 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); + 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 - + (o->*m)(); + } + + /** Static function pointer - 0 if none attached + */ + void (*_function)(void); + + /** Object this pointer - 0 if none attached + */ + void *_object; + + /** Raw member function pointer storage - converted back by registered _membercaller + */ + char _member[16]; + + /** Registered membercaller function to convert back and call _member on _object + */ + void (*_membercaller)(void*, char*); + }; } // namespace mbed