my fork
Fork of mbed by
Diff: FunctionPointer.h
- Revision:
- 44:24d45a770a51
- Parent:
- 43:e2ed12d17f06
- Child:
- 54:71b101360fb9
diff -r e2ed12d17f06 -r 24d45a770a51 FunctionPointer.h --- a/FunctionPointer.h Fri Oct 26 17:40:46 2012 +0100 +++ b/FunctionPointer.h Wed Nov 21 10:49:56 2012 +0000 @@ -1,7 +1,24 @@ -/* mbed Microcontroller Library - FunctionPointer - * Copyright (c) 2007-2009 ARM Limited. All rights reserved. - */ - +/* mbed Microcontroller Library + * Copyright (c) 2006-2012 ARM Limited + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ #ifndef MBED_FUNCTIONPOINTER_H #define MBED_FUNCTIONPOINTER_H @@ -12,7 +29,6 @@ /** A class for storing and calling a pointer to a static or member void function */ class FunctionPointer { - public: /** Create a FunctionPointer, attaching a static function @@ -26,11 +42,11 @@ * @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> + template<typename T> FunctionPointer(T *object, void (T::*member)(void)) { attach(object, member); } - + /** Attach a static function * * @param function The void static function to attach (default is none) @@ -49,37 +65,24 @@ _membercaller = &FunctionPointer::membercaller<T>; _function = 0; } - + /** Call the attached static or member function - */ + */ void call(); - + private: - template<typename T> - static void membercaller(void *object, char *member) { + 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)(); } - /** 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*); - + 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 }; } // namespace mbed