00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 #ifndef VRS_CALLBACK_H
00083 #define VRS_CALLBACK_H
00084
00085 #include <vrs/sharedobj.h>
00086
00087 namespace VRS {
00088
00090 class VRS_CORE_API CallbackBase : public SharedObj {
00091
00092 public:
00093
00094 VRS_TYPEINFO(CallbackBase, SharedObj);
00095 };
00096
00098 class VRS_CORE_API Callback : public CallbackBase {
00099
00100 public:
00101
00102 virtual void callback() = 0;
00103 void callback() const;
00108 VRS_TYPEINFO(Callback, CallbackBase);
00109 };
00110
00111 inline void Callback::callback() const { const_cast<Callback*>(this)->callback(); }
00112
00113
00116 template<class RETURN>
00117 class CallbackR : public CallbackBase {
00118
00119 public:
00120
00121 virtual RETURN callback() = 0;
00122 RETURN callback() const { return const_cast<CallbackR*>(this)->callback(); }
00127 VRS_TYPEINFO(CallbackR, CallbackBase);
00128 };
00129
00130
00133 template<class ARG1>
00134 class Callback1 : public CallbackBase {
00135
00136 public:
00137
00138 virtual void callback(ARG1 arg1) = 0;
00139 void callback(ARG1 arg1) const { const_cast<Callback1*>(this)->callback(arg1); }
00144 VRS_TYPEINFO(Callback1, CallbackBase);
00145 };
00146
00147
00150 template<class RETURN, class ARG1>
00151 class CallbackR1 : public CallbackBase {
00152
00153 public:
00154
00155 virtual RETURN callback(ARG1 arg1) = 0;
00156 RETURN callback(ARG1 arg1) const { return const_cast<CallbackR1*>(this)->callback(arg1); }
00161 VRS_TYPEINFO(CallbackR1, CallbackBase);
00162 };
00163
00166 template<class ARG1, class ARG2>
00167 class Callback2 : public CallbackBase {
00168
00169 public:
00170
00171 virtual void callback(ARG1 arg1, ARG2 arg2) = 0;
00172 void callback(ARG1 arg1, ARG2 arg2) const { const_cast<Callback2*>(this)->callback(arg1, arg2); }
00177 VRS_TYPEINFO(Callback2, CallbackBase);
00178 };
00179
00182 template<class RETURN, class ARG1, class ARG2>
00183 class CallbackR2 : public CallbackBase {
00184
00185 public:
00186
00187 virtual RETURN callback(ARG1 arg1, ARG2 arg2) = 0;
00188 RETURN callback(ARG1 arg1, ARG2 arg2) const { return const_cast<CallbackR2*>(this)->callback(arg1, arg2); }
00193 VRS_TYPEINFO(CallbackR2, CallbackBase);
00194 };
00195
00198 template<class ARG1, class ARG2, class ARG3>
00199 class Callback3 : public CallbackBase {
00200
00201 public:
00202
00203 virtual void callback(ARG1 arg1, ARG2 arg2, ARG3 arg3) = 0;
00204 void callback(ARG1 arg1, ARG2 arg2, ARG3 arg3) const { const_cast<Callback3*>(this)->callback(arg1, arg2, arg3); }
00209 VRS_TYPEINFO(Callback3, CallbackBase);
00210 };
00211
00214 template<class RETURN, class ARG1, class ARG2, class ARG3>
00215 class CallbackR3 : public CallbackBase {
00216
00217 public:
00218
00219 virtual RETURN callback(ARG1 arg1, ARG2 arg2, ARG3 arg3) = 0;
00220 RETURN callback(ARG1 arg1, ARG2 arg2, ARG3 arg3) const { return const_cast<CallbackR3*>(this)->callback(arg1, arg2, arg3); }
00225 VRS_TYPEINFO(CallbackR3, CallbackBase);
00226 };
00227
00230 template<class ARG1, class ARG2, class ARG3,class ARG4>
00231 class Callback4 : public CallbackBase {
00232
00233 public:
00234
00235 virtual void callback(ARG1 arg1, ARG2 arg2, ARG3 arg3, ARG4 arg4) = 0;
00236 void callback(ARG1 arg1, ARG2 arg2, ARG3 arg3, ARG4 arg4) const { const_cast<Callback4*>(this)->callback(arg1, arg2, arg3, arg4); }
00241 VRS_TYPEINFO(Callback4, CallbackBase);
00242 };
00243
00246 template<class RETURN, class ARG1, class ARG2, class ARG3, class ARG4>
00247 class CallbackR4 : public CallbackBase {
00248
00249 public:
00250
00251 virtual RETURN callback(ARG1 arg1, ARG2 arg2, ARG3 arg3, ARG4 arg4) = 0;
00252 RETURN callback(ARG1 arg1, ARG2 arg2, ARG3 arg3, ARG4 arg4) const { return const_cast<CallbackR4*>(this)->callback(arg1, arg2, arg3,arg4); }
00257 VRS_TYPEINFO(CallbackR4, CallbackBase);
00258 };
00259
00260
00261
00262 }
00263
00264 #include <vrs/functioncallback.h>
00265 #include <vrs/methodcallback.h>
00266
00267 #endif // VRS_CALLBACK_H