19#ifndef MBED_FUNCTIONPOINTER_WITH_CONTEXT_H
20#define MBED_FUNCTIONPOINTER_WITH_CONTEXT_H
57template <
typename ContextType>
62 typedef void (*pvoidfcontext_t)(ContextType context);
99 _caller(that._caller), _next(NULL) {
114 _caller = that._caller;
129 void attach(
void (*function)(ContextType context) = NULL)
132 _caller = functioncaller;
148 void attach(T *
object,
void (T::*member)(ContextType context))
156 _caller = &FunctionPointerWithContext::membercaller<T>;
164 void call(ContextType context)
const
166 _caller(
this, context);
259 return rhs._caller == lhs._caller &&
269 static void membercaller(cpFunctionPointerWithContext_t self, ContextType context) {
270 if (self->_memberFunctionAndPointer._object) {
271 T *o =
static_cast<T *
>(self->_memberFunctionAndPointer._object);
272 void (T::*m)(ContextType);
273 memcpy((
char*) &m, self->_memberFunctionAndPointer._memberFunction,
sizeof(m));
278 static void functioncaller(cpFunctionPointerWithContext_t self, ContextType context) {
279 if (self->_function) {
280 self->_function(context);
284 struct MemberFunctionAndPtr {
291 class UndefinedClass;
292 typedef void (UndefinedClass::*UndefinedMemberFunction)(ContextType);
296 char _memberFunction[
sizeof(UndefinedMemberFunction)];
297 UndefinedMemberFunction _alignment;
312 pFunctionPointerWithContext_t _next;
354template<
typename T,
typename ContextType>
357 void (T::*member)(ContextType context)
Function like object adapter over freestanding and member functions.
bool toBool() const
Indicate if a callable object is being adapted.
FunctionPointerWithContext(const FunctionPointerWithContext &that)
Copy construction.
pFunctionPointerWithContext_t getNext() const
Access the next element in the call chain.
pvoidfcontext_t _function
Static function pointer - NULL if none attached.
void call(ContextType context)
Call the adapted function and functions chained to the instance.
pvoidfcontext_t get_function() const
Access the next element in the call chain.
void attach(void(*function)(ContextType context)=NULL)
Adapt a freestanding function.
FunctionPointerWithContext & operator=(const FunctionPointerWithContext &that)
Copy assignment.
FunctionPointerWithContext(void(*function)(ContextType context)=NULL)
Create a FunctionPointerWithContext from a pointer to a freestanding function.
FunctionPointerWithContext(T *object, void(T::*member)(ContextType context))
Create a FunctionPointerWithContext from a pointer to a member function and the instance which is use...
MemberFunctionAndPtr _memberFunctionAndPointer
object this pointer and pointer to member - _memberFunctionAndPointer._object will be NULL if none at...
friend bool operator==(const FunctionPointerWithContext &lhs, const FunctionPointerWithContext &rhs)
Equal to operator between two FunctionPointerWithContext instances.
void call(ContextType context) const
Call the adapted function and functions chained to the instance.
void chainAsNext(pFunctionPointerWithContext_t next)
Set a FunctionPointer instance as the next element in the chain of callable objects.
void attach(T *object, void(T::*member)(ContextType context))
Adapt a pointer to member function and the instance to use to call it.
void operator()(ContextType context) const
Call the adapted function and functions chained to the instance.
Safe conversion of objects in boolean context.
FunctionPointerWithContext< ContextType > makeFunctionPointer(T *object, void(T::*member)(ContextType context))
Factory of adapted member function pointers.