The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
Diff: CallChain.h
- Revision:
- 122:f9eeca106725
- Parent:
- 85:024bf7f99721
- Child:
- 123:b0220dba8be7
--- a/CallChain.h Wed May 25 16:44:06 2016 +0100 +++ b/CallChain.h Thu Jul 07 14:34:11 2016 +0100 @@ -16,7 +16,7 @@ #ifndef MBED_CALLCHAIN_H #define MBED_CALLCHAIN_H -#include "FunctionPointer.h" +#include "Callback.h" #include <string.h> namespace mbed { @@ -25,6 +25,8 @@ * sequence using CallChain::call(). Used mostly by the interrupt chaining code, * but can be used for other purposes. * + * @Note Synchronization level: Not protected + * * Example: * @code * #include "mbed.h" @@ -57,7 +59,8 @@ * @endcode */ -typedef FunctionPointer* pFunctionPointer_t; +typedef Callback<void()> *pFunctionPointer_t; +class CallChainLink; class CallChain { public: @@ -70,34 +73,34 @@ /** Add a function at the end of the chain * - * @param function A pointer to a void function + * @param func A pointer to a void function * * @returns - * The function object created for 'function' + * The function object created for 'func' */ - pFunctionPointer_t add(void (*function)(void)); + pFunctionPointer_t add(Callback<void()> func); /** Add a function at the end of the chain * - * @param tptr pointer to the object to call the member function on - * @param mptr pointer to the member function to be called + * @param obj pointer to the object to call the member function on + * @param method pointer to the member function to be called * * @returns - * The function object created for 'tptr' and 'mptr' + * The function object created for 'obj' and 'method' */ - template<typename T> - pFunctionPointer_t add(T *tptr, void (T::*mptr)(void)) { - return common_add(new FunctionPointer(tptr, mptr)); + template<typename T, typename M> + pFunctionPointer_t add(T *obj, M method) { + return add(Callback<void()>(obj, method)); } /** Add a function at the beginning of the chain * - * @param function A pointer to a void function + * @param func A pointer to a void function * * @returns - * The function object created for 'function' + * The function object created for 'func' */ - pFunctionPointer_t add_front(void (*function)(void)); + pFunctionPointer_t add_front(Callback<void()> func); /** Add a function at the beginning of the chain * @@ -107,9 +110,9 @@ * @returns * The function object created for 'tptr' and 'mptr' */ - template<typename T> - pFunctionPointer_t add_front(T *tptr, void (T::*mptr)(void)) { - return common_add_front(new FunctionPointer(tptr, mptr)); + template<typename T, typename M> + pFunctionPointer_t add_front(T *obj, M method) { + return add_front(Callback<void()>(obj, method)); } /** Get the number of functions in the chain @@ -160,19 +163,11 @@ } #endif -private: - void _check_size(); - pFunctionPointer_t common_add(pFunctionPointer_t pf); - pFunctionPointer_t common_add_front(pFunctionPointer_t pf); - - pFunctionPointer_t* _chain; - int _size; - int _elements; - /* disallow copy constructor and assignment operators */ private: CallChain(const CallChain&); CallChain & operator = (const CallChain&); + CallChainLink *_chain; }; } // namespace mbed