ACKme Logo WiConnect Host Library- API Reference Guide
 
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Groups Pages
ReaderFunc.h
1 
29 #pragma once
30 
31 #include "api/WiconnectTypes.h"
32 #include "FunctionPointer.h"
33 
34 
35 namespace wiconnect
36 {
37 
38 typedef WiconnectResult (*_ReaderFunc)(void *user, void *data, int maxReadSize, int *bytesRead);
39 
46 {
47 public:
48 
49  /*************************************************************************************************/
50  ReaderFunc(_ReaderFunc func = 0)
51  {
52  _function = (void*)func;
53  _membercaller = NULL;
54  _object = NULL;
55  }
56 
57  /*************************************************************************************************/
58  template<typename T>
59  ReaderFunc(T *object, WiconnectResult (T::*member)(void *user, void *data, int maxReadSize, int *bytesRead))
60  {
61  _object = static_cast<void*>(object);
62  memcpy(_member, (char*)&member, sizeof(member));
63  _membercaller = (void*)&ReaderFunc::membercaller<T>;
64  _function = 0;
65  }
66 
67  /*************************************************************************************************/
68  WiconnectResult call(void *user, void *data, int maxReadSize, int *bytesRead)
69  {
70  if (_function)
71  {
72  return ((_ReaderFunc)_function)(user, data, maxReadSize, bytesRead);
73  }
74  else if (_object)
75  {
76  typedef WiconnectResult (*membercallerFunc)(void*, char*, void *user, void *data, int maxReadSize, int *bytesRead);
77  return ((membercallerFunc)_membercaller)(_object, _member, user, data, maxReadSize, bytesRead);
78  }
79  else
80  {
81  return WICONNECT_ERROR;
82  }
83  }
84 
85 private:
86 
87  /*************************************************************************************************/
88  template<typename T>
89  static WiconnectResult membercaller(void *object, char *member, void *user, void *data, int maxReadSize, int *bytesRead)
90  {
91  T* o = static_cast<T*>(object);
92  WiconnectResult (T::*m)(void *user, void *data, int maxReadSize, int *bytesRead);
93  memcpy((char*)&m, member, sizeof(m));
94  return (o->*m)(user, data, maxReadSize, bytesRead);
95  }
96 };
97 
98 }
WiconnectResult
API Result code.
Generic data reading callback function.
Definition: ReaderFunc.h:45
Generic function pointer.