Host library for controlling a WiConnect enabled Wi-Fi module.
Dependents: wiconnect-ota_example wiconnect-web_setup_example wiconnect-test-console wiconnect-tcp_server_example ... more
Diff: types/LogFunc.h
- Revision:
- 0:ea85c4bb5e1f
- Child:
- 1:6ec9998427ad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/types/LogFunc.h Mon Aug 11 09:58:24 2014 +0000 @@ -0,0 +1,77 @@ +/* + * Copyright 2014, ACKme Networks + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of ACKme Networks; + * the contents of this file may not be disclosed to third parties, copied + * or duplicated in any form, in whole or in part, without the prior + * written permission of ACKme Networks. + */ + +#pragma once + +#include "WiconnectTypes.h" +#include "FunctionPointer.h" + +namespace wiconnect +{ + +typedef int (*_LogFunc)(const char *str); + +class LogFunc : public FunctionPointer +{ +public: + /*************************************************************************************************/ + LogFunc(_LogFunc func = 0) + { + _function = (void*)func; + _membercaller = NULL; + _object = NULL; + } + + /*************************************************************************************************/ + template<typename T> + LogFunc(T *object, WiconnectResult (T::*member)(const char *str)) + { + _object = static_cast<void*>(object); + memcpy(_member, (char*)&member, sizeof(member)); + _membercaller = (void*)&LogFunc::membercaller<T>; + _function = 0; + } + + /*************************************************************************************************/ + int call(const char *str) + { + if (_function) + { + return ((_LogFunc)_function)(str); + } + else if (_object) + { + typedef int (*membercallerFunc)(void*, char*, const char *str); + return ((membercallerFunc)_membercaller)(_object, _member, str); + } + else + { + return -1; + } + } + +private: + + /*************************************************************************************************/ + template<typename T> + static int membercaller(void *object, char *member, const char *str) + { + T* o = static_cast<T*>(object); + int (T::*m)(const char *str); + memcpy((char*)&m, member, sizeof(m)); + return (o->*m)(str); + } +}; + + + + +} +