Changeset 247 for cpp/frams/util/callbacks.h
- Timestamp:
- 11/07/14 17:51:01 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/frams/util/callbacks.h
r197 r247 8 8 #include "list.h" 9 9 #include "statrick.h" 10 #include <stdint.h> 10 11 11 12 //#define USEMEMBERCALLBACK … … 15 16 public: 16 17 virtual ~CallbackNode() {} 17 virtual void action( longcalldata)=0;18 virtual void action(intptr_t calldata)=0; 18 19 virtual int equals(CallbackNode*n) {return (this==n);} 19 20 }; … … 25 26 void *userdata; 26 27 CallBase *object; 27 void (CallBase::*member)(void*, long);28 void (CallBase::*member)(void*,intptr_t); 28 29 public: 29 MemberCallbackNode(CallBase *o,void (CallBase::*m)(void*, long),void *d):object(o),member(m),userdata(d) {}30 void action( longcalldata) {(object->*member)(userdata,calldata);}30 MemberCallbackNode(CallBase *o,void (CallBase::*m)(void*,intptr_t),void *d):object(o),member(m),userdata(d) {} 31 void action(intptr_t calldata) {(object->*member)(userdata,calldata);} 31 32 int equals(CallbackNode*); 32 33 }; 33 #define MEMBERCALLBACK(obj,mem,dat) new MemberCallbackNode((CallBase*)(obj),(void (CallBase::*)(void*, long))(mem),(void*)(dat))34 #define MEMBERCALLBACK(obj,mem,dat) new MemberCallbackNode((CallBase*)(obj),(void (CallBase::*)(void*,intptr_t))(mem),(void*)(dat)) 34 35 #endif 35 36 … … 37 38 { 38 39 void *userdata; 39 void (*fun)(void*, long);40 void (*fun)(void*,intptr_t); 40 41 public: 41 FunctionCallbackNode(void (*f)(void*, long),void *d):userdata(d),fun(f) {}42 void action( longcalldata) {(*fun)(userdata,calldata);}42 FunctionCallbackNode(void (*f)(void*,intptr_t),void *d):userdata(d),fun(f) {} 43 void action(intptr_t calldata) {(*fun)(userdata,calldata);} 43 44 int equals(CallbackNode*); 44 45 }; 45 #define FUNCTIONCALLBACK(fun,dat) new FunctionCallbackNode((void (*)(void*, long))(fun),(void*)(dat))46 #define FUNCTIONCALLBACK(fun,dat) new FunctionCallbackNode((void (*)(void*,intptr_t))(fun),(void*)(dat)) 46 47 47 48 class StatrickCallbackNode :public CallbackNode … … 49 50 void *object; 50 51 void *userdata; 51 void (*fun)(void*,void*, long);52 void (*fun)(void*,void*,intptr_t); 52 53 public: 53 StatrickCallbackNode(void *o,void (*f)(void*,void*, long),void *d):object(o),userdata(d),fun(f) {}54 void action( longcalldata) {(*fun)(object,userdata,calldata);}54 StatrickCallbackNode(void *o,void (*f)(void*,void*,intptr_t),void *d):object(o),userdata(d),fun(f) {} 55 void action(intptr_t calldata) {(*fun)(object,userdata,calldata);} 55 56 int equals(CallbackNode*); 56 57 }; 57 #define STATRICKCALLBACK(obj,name,dat) new StatrickCallbackNode((void*)(obj),(void (*)(void*,void*, long))STATRICKNAME(name),(void*)(dat))58 #define STATRICKCALLBACK(obj,name,dat) new StatrickCallbackNode((void*)(obj),(void (*)(void*,void*,intptr_t))STATRICKNAME(name),(void*)(dat)) 58 59 59 60 /** … … 61 62 add(Function* fun, void* anydata) 62 63 'fun' will be called with your pointer as the first argument (void*) 63 and event specific value as the second argument ( long)64 fun(void* anydata, longeventdata)64 and event specific value as the second argument (intptr_t) 65 fun(void* anydata,intptr_t eventdata) 65 66 66 67 'StatrickCallbackNode' uses static functions to emulate object member calls. … … 81 82 ~Callback(); 82 83 CallbackNode* add(CallbackNode*n); 83 CallbackNode* add(void (*f)(void*, long),void *d)84 CallbackNode* add(void (*f)(void*,intptr_t),void *d) 84 85 {return add(new FunctionCallbackNode(f,d));} 85 void remove(void (*f)(void*, long),void *d)86 void remove(void (*f)(void*,intptr_t),void *d) 86 87 {remove(new FunctionCallbackNode(f,d));} 87 88 void remove(CallbackNode*n); 88 89 void removeNode(CallbackNode*n); 89 void operator+=(void* fun) {add((void (*)(void*, long))fun,0);}90 void operator-=(void* fun) {remove((void (*)(void*, long))fun,0);}91 void action( longdata);90 void operator+=(void* fun) {add((void (*)(void*,intptr_t))fun,0);} 91 void operator-=(void* fun) {remove((void (*)(void*,intptr_t))fun,0);} 92 void action(intptr_t data); 92 93 void action() {action(0);} 93 94 int size() {return SList::size();} … … 97 98 /////////////////// 98 99 99 #define STCALLBACKDEF(name) STATRICKDEF2(name,void*, long)100 #define STCALLBACKDEFC(cls,name) STATRICKSTUB2(cls,name,void*, long) \101 void name(void* arg1, longarg2)102 #define VIRTCALLBACKDEF(name) STATRICKSTUB2(STATRICKCLASS,name,void*, long) \103 virtual void name(void* arg1, longarg2)104 #define VIRTCALLBACKDEFC(cls,name) STATRICKSTUB2(cls,name,void*, long) \105 virtual void name(void* arg1, longarg2)100 #define STCALLBACKDEF(name) STATRICKDEF2(name,void*,intptr_t) 101 #define STCALLBACKDEFC(cls,name) STATRICKSTUB2(cls,name,void*,intptr_t) \ 102 void name(void* arg1,intptr_t arg2) 103 #define VIRTCALLBACKDEF(name) STATRICKSTUB2(STATRICKCLASS,name,void*,intptr_t) \ 104 virtual void name(void* arg1,intptr_t arg2) 105 #define VIRTCALLBACKDEFC(cls,name) STATRICKSTUB2(cls,name,void*,intptr_t) \ 106 virtual void name(void* arg1,intptr_t arg2) 106 107 107 108 /* STCALLBACKDEFC(Class,name) … … 115 116 */ 116 117 117 #define CALLBACKARGS void* arg1, longarg2118 #define CALLBACKARGS void* arg1,intptr_t arg2 118 119 119 120 #endif
Note: See TracChangeset
for help on using the changeset viewer.