00001
00002
00003
00004
00005
00006
00007
00008 #ifndef SAGA_CALL_HPP
00009 #define SAGA_CALL_HPP
00010
00011 #include <saga/saga/task.hpp>
00012
00014
00016
00017
00018
00019
00021
00022
00023
00025
00026
00027 #define SAGA_CALL_PUB_0_DEF_0(name) \
00028 template <typename Tag> \
00029 saga::task name() \
00030 { return name ## priv(Tag()); } \
00031 //-----------------------------------------------------------------------------
00032
00033
00034 #define SAGA_CALL_CONST_PUB_0_DEF_0(name) \
00035 template <typename Tag> \
00036 saga::task name() const \
00037 { return name ## priv(Tag()); } \
00038 //-----------------------------------------------------------------------------
00039
00040
00041 #define SAGA_CALL_PRIV_0(name) \
00042 saga::task name ## priv (saga::task_base::Sync); \
00043 saga::task name ## priv (saga::task_base::ASync); \
00044 saga::task name ## priv (saga::task_base::Task); \
00045 //-----------------------------------------------------------------------------
00046 #define SAGA_CALL_CONST_PRIV_0(name) \
00047 saga::task name ## priv (saga::task_base::Sync) const; \
00048 saga::task name ## priv (saga::task_base::ASync) const; \
00049 saga::task name ## priv (saga::task_base::Task) const; \
00050 //-----------------------------------------------------------------------------
00051
00053
00054
00055
00057
00058
00059 #define SAGA_CALL_PUB_1_DEF_0(name, p1) \
00060 template <typename Tag> \
00061 saga::task name (p1 par1) \
00062 { return (name ## priv (par1, Tag())); } \
00063 //-----------------------------------------------------------------------------
00064 #define SAGA_CALL_PUB_1_DEF_1(name, p1, d1) \
00065 template <typename Tag> \
00066 saga::task name (p1 par1 = d1) \
00067 { return (name ## priv (par1, Tag())); } \
00068 //-----------------------------------------------------------------------------
00069
00070
00071 #define SAGA_CALL_CONST_PUB_1_DEF_0(name, p1) \
00072 template <typename Tag> \
00073 saga::task name (p1 par1) const \
00074 { return (name ## priv (par1, Tag())); } \
00075 //-----------------------------------------------------------------------------
00076 #define SAGA_CALL_CONST_PUB_1_DEF_1(name, p1, d1) \
00077 template <typename Tag> \
00078 saga::task name (p1 par1 = d1) const \
00079 { return (name ## priv (par1, Tag())); } \
00080 //-----------------------------------------------------------------------------
00081
00082
00083 #define SAGA_CALL_PRIV_1(name, p1) \
00084 saga::task name ## priv (p1 par1, saga::task_base::Sync); \
00085 saga::task name ## priv (p1 par1, saga::task_base::ASync); \
00086 saga::task name ## priv (p1 par1, saga::task_base::Task); \
00087 //-----------------------------------------------------------------------------
00088 #define SAGA_CALL_CONST_PRIV_1(name, p1) \
00089 saga::task name ## priv (p1 par1, saga::task_base::Sync) const; \
00090 saga::task name ## priv (p1 par1, saga::task_base::ASync) const; \
00091 saga::task name ## priv (p1 par1, saga::task_base::Task) const; \
00092 //-----------------------------------------------------------------------------
00093
00095
00096
00097
00099
00100
00101 #define SAGA_CALL_PUB_2_DEF_0(name, p1, p2) \
00102 template <typename Tag> \
00103 saga::task name (p1 par1, p2 par2) \
00104 { return (name ## priv (par1, par2, Tag())); } \
00105 //-----------------------------------------------------------------------------
00106 #define SAGA_CALL_PUB_2_DEF_1(name, p1, p2, d2) \
00107 template <typename Tag> \
00108 saga::task name (p1 par1, p2 par2 = d2) \
00109 { return (name ## priv (par1, par2, Tag())); } \
00110 //-----------------------------------------------------------------------------
00111 #define SAGA_CALL_PUB_2_DEF_2(name, p1, d1, p2, d2) \
00112 template <typename Tag> \
00113 saga::task name (p1 par1 = d1, p2 par2 = d2) \
00114 { return (name ## priv (par1, par2, Tag())); } \
00115 //-----------------------------------------------------------------------------
00116
00117
00118 #define SAGA_CALL_CONST_PUB_2_DEF_0(name, p1, p2) \
00119 template <typename Tag> \
00120 saga::task name (p1 par1, p2 par2) const \
00121 { return (name ## priv (par1, par2, Tag())); } \
00122 //-----------------------------------------------------------------------------
00123 #define SAGA_CALL_CONST_PUB_2_DEF_1(name, p1, p2, d2) \
00124 template <typename Tag> \
00125 saga::task name (p1 par1, p2 par2 = d2) const \
00126 { return (name ## priv (par1, par2, Tag())); } \
00127 //-----------------------------------------------------------------------------
00128 #define SAGA_CALL_CONST_PUB_2_DEF_2(name, p1, d1, p2, d2) \
00129 template <typename Tag> \
00130 saga::task name (p1 par1 = d1, p2 par2 = d2) const \
00131 { return (name ## priv (par1, par2, Tag())); } \
00132 //-----------------------------------------------------------------------------
00133
00134
00135 #define SAGA_CALL_PRIV_2(name, p1, p2) \
00136 saga::task name ## priv (p1, p2, saga::task_base::Sync); \
00137 saga::task name ## priv (p1, p2, saga::task_base::ASync); \
00138 saga::task name ## priv (p1, p2, saga::task_base::Task); \
00139 //-----------------------------------------------------------------------------
00140 #define SAGA_CALL_CONST_PRIV_2(name, p1, p2) \
00141 saga::task name ## priv (p1, p2, saga::task_base::Sync) const; \
00142 saga::task name ## priv (p1, p2, saga::task_base::ASync) const; \
00143 saga::task name ## priv (p1, p2, saga::task_base::Task) const; \
00144 //-----------------------------------------------------------------------------
00145
00147
00148
00149
00151
00152
00153 #define SAGA_CALL_PUB_3_DEF_0(name, p1, p2, p3) \
00154 template <typename Tag> \
00155 saga::task name (p1 par1, p2 par2, p3 par3) \
00156 { return (name ## priv (par1, par2, par3, Tag())); } \
00157 //-----------------------------------------------------------------------------
00158 #define SAGA_CALL_PUB_3_DEF_1(name, p1, p2, p3, d3) \
00159 template <typename Tag> \
00160 saga::task name (p1 par1, p2 par2, p3 par3 = d3) \
00161 { return (name ## priv (par1, par2, par3, Tag())); } \
00162 //-----------------------------------------------------------------------------
00163 #define SAGA_CALL_PUB_3_DEF_2(name, p1, p2, d2, p3, d3) \
00164 template <typename Tag> \
00165 saga::task name (p1 par1, p2 par2 = d2, p3 par3 = d3) \
00166 { return (name ## priv (par1, par2, par3, Tag())); } \
00167 //-----------------------------------------------------------------------------
00168 #define SAGA_CALL_PUB_3_DEF_3(name, p1, d1, p2, d2, p3, d3) \
00169 template <typename Tag> \
00170 saga::task name (p1 par1 = d1, p2 par2 = d2, p3 par3 = d3) \
00171 { return (name ## priv (par1, par2, par3, Tag())); } \
00172 //-----------------------------------------------------------------------------
00173
00174
00175 #define SAGA_CALL_CONST_PUB_3_DEF_0(name, p1, p2, p3) \
00176 template <typename Tag> \
00177 saga::task name (p1 par1, p2 par2, p3 par3) \
00178 { return (name ## priv (par1, par2, par3, Tag())); } \
00179 //-----------------------------------------------------------------------------
00180 #define SAGA_CALL_CONST_PUB_3_DEF_1(name, p1, p2, p3, d3) \
00181 template <typename Tag> \
00182 saga::task name (p1 par1, p2 par2, p3 par3 = d3) const \
00183 { return (name ## priv (par1, par2, par3, Tag())); } \
00184 //-----------------------------------------------------------------------------
00185 #define SAGA_CALL_CONST_PUB_3_DEF_2(name, p1, p2, d2, p3, d3) \
00186 template <typename Tag> \
00187 saga::task name (p1 par1, p2 par2 = d2, p3 par3 = d3) const \
00188 { return (name ## priv (par1, par2, par3, Tag())); } \
00189 //-----------------------------------------------------------------------------
00190 #define SAGA_CALL_CONST_PUB_3_DEF_3(name, p1, d1, p2, d2, p3, d3) \
00191 template <typename Tag> \
00192 saga::task name (p1 par1 = d1, p2 par2 = d2, p3 par3 = d3) const \
00193 { return (name ## priv (par1, par2, par3, Tag())); } \
00194 //-----------------------------------------------------------------------------
00195
00196
00197 #define SAGA_CALL_PRIV_3(name, p1, p2, p3) \
00198 saga::task name ## priv (p1, p2, p3, saga::task_base::Sync); \
00199 saga::task name ## priv (p1, p2, p3, saga::task_base::ASync); \
00200 saga::task name ## priv (p1, p2, p3, saga::task_base::Task); \
00201 //-----------------------------------------------------------------------------
00202 #define SAGA_CALL_CONST_PRIV_3(name, p1, p2, p3) \
00203 saga::task name ## priv (p1, p2, p3, saga::task_base::Sync) const; \
00204 saga::task name ## priv (p1, p2, p3, saga::task_base::ASync) const; \
00205 saga::task name ## priv (p1, p2, p3, saga::task_base::Task) const; \
00206 //-----------------------------------------------------------------------------
00207
00209
00210
00211
00213
00214
00215 #define SAGA_CALL_PUB_4_DEF_0(name, p1, p2, p3, p4) \
00216 template <typename Tag> \
00217 saga::task name (p1 par1, p2 par2, p3 par3, p4 par4) \
00218 { return (name ## priv (par1, par2, par3, par4, Tag())); } \
00219 //-----------------------------------------------------------------------------
00220 #define SAGA_CALL_PUB_4_DEF_1(name, p1, p2, p3, p4, d4) \
00221 template <typename Tag> \
00222 saga::task name (p1 par1, p2 par2, p3 par3, p4 par4 = d4) \
00223 { return (name ## priv (par1, par2, par3, par4, Tag())); } \
00224 //-----------------------------------------------------------------------------
00225 #define SAGA_CALL_PUB_4_DEF_2(name, p1, p2, p3, d3, p4, d4) \
00226 template <typename Tag> \
00227 saga::task name (p1 par1, p2 par2, p3 par3 = d3, p4 par4 = d4) \
00228 { return (name ## priv (par1, par2, par3, par4, Tag())); } \
00229 //-----------------------------------------------------------------------------
00230 #define SAGA_CALL_PUB_4_DEF_3(name, p1, p2, d2, p3, d3, p4, d4) \
00231 template <typename Tag> \
00232 saga::task name (p1 par1, p2 par2 = d2, p3 par3 = d3, \
00233 p4 par4 = d4) \
00234 { return (name ## priv (par1, par2, par3, par4, Tag())); } \
00235 //-----------------------------------------------------------------------------
00236 #define SAGA_CALL_PUB_4_DEF_4(name, p1, d1, p2, d2, p3, d3, p4, d4) \
00237 template <typename Tag> \
00238 saga::task name (p1 par1 = d1, p2 par2 = d2, p3 par3 = d3, \
00239 p4 par4 = d4) \
00240 { return (name ## priv (par1, par2, par3, par4, Tag())); } \
00241 //-----------------------------------------------------------------------------
00242
00243
00244 #define SAGA_CALL_CONST_PUB_4_DEF_0(name, p1, p2, p3, p4) \
00245 template <typename Tag> \
00246 saga::task name (p1 par1, p2 par2, p3 par3, p4 par4) const \
00247 { return (name ## priv (par1, par2, par3, par4, Tag())); } \
00248 //-----------------------------------------------------------------------------
00249 #define SAGA_CALL_CONST_PUB_4_DEF_1(name, p1, p2, p3, p4, d4) \
00250 template <typename Tag> \
00251 saga::task name (p1 par1, p2 par2, p3 par3, p4 par4 = d4) const \
00252 { return (name ## priv (par1, par2, par3, par4, Tag())); } \
00253 //-----------------------------------------------------------------------------
00254 #define SAGA_CALL_CONST_PUB_4_DEF_2(name, p1, p2, p3, d3, p4, d4) \
00255 template <typename Tag> \
00256 saga::task name (p1 par1, p2 par2, p3 par3 = d3, p4 par4 = d4) const \
00257 { return (name ## priv (par1, par2, par3, par4, Tag())); } \
00258 //-----------------------------------------------------------------------------
00259 #define SAGA_CALL_CONST_PUB_4_DEF_3(name, p1, p2, d2, p3, d3, p4, d4) \
00260 template <typename Tag> \
00261 saga::task name (p1 par1, p2 par2 = d2, p3 par3 = d3, \
00262 p4 par4 = d4) const \
00263 { return (name ## priv (par1, par2, par3, par4, Tag())); } \
00264 //-----------------------------------------------------------------------------
00265 #define SAGA_CALL_CONST_PUB_4_DEF_4(name, p1, d1, p2, d2, p3, d3, p4, d4) \
00266 template <typename Tag> \
00267 saga::task name (p1 par1 = d1, p2 par2 = d2, p3 par3 = d3, \
00268 p4 par4 = d4) const \
00269 { return (name ## priv (par1, par2, par3, par4, Tag())); } \
00270 //-----------------------------------------------------------------------------
00271
00272
00273 #define SAGA_CALL_PRIV_4(name, p1, p2, p3, p4) \
00274 saga::task name ## priv (p1, p2, p3, p4, saga::task_base::Sync); \
00275 saga::task name ## priv (p1, p2, p3, p4, saga::task_base::ASync); \
00276 saga::task name ## priv (p1, p2, p3, p4, saga::task_base::Task); \
00277 //-----------------------------------------------------------------------------
00278 #define SAGA_CALL_CONST_PRIV_4(name, p1, p2, p3, p4) \
00279 saga::task name ## priv (p1, p2, p3, p4, saga::task_base::Sync) const; \
00280 saga::task name ## priv (p1, p2, p3, p4, saga::task_base::ASync) const; \
00281 saga::task name ## priv (p1, p2, p3, p4, saga::task_base::Task) const; \
00282 //-----------------------------------------------------------------------------
00283
00285
00286
00287
00289
00290
00291 #define SAGA_CALL_PUB_5_DEF_0(name, p1, p2, p3, p4, p5) \
00292 template <typename Tag> \
00293 saga::task name (p1 par1, p2 par2, p3 par3, p4 par4, p5 par5) \
00294 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00295 //-----------------------------------------------------------------------------
00296 #define SAGA_CALL_PUB_5_DEF_1(name, p1, p2, p3, p4, p5, d5) \
00297 template <typename Tag> \
00298 saga::task name (p1 par1, p2 par2, p3 par3, p4 par4, \
00299 p5 par5 = d5) \
00300 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00301 //-----------------------------------------------------------------------------
00302 #define SAGA_CALL_PUB_5_DEF_2(name, p1, p2, p3, p4, d4, p5, d5) \
00303 template <typename Tag> \
00304 saga::task name (p1 par1, p2 par2, p3 par3, p4 par4 = d4, \
00305 p5 par5 = d5) \
00306 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00307 //-----------------------------------------------------------------------------
00308 #define SAGA_CALL_PUB_5_DEF_3(name, p1, p2, p3, d3, p4, d4, p5, d5) \
00309 template <typename Tag> \
00310 saga::task name (p1 par1, p2 par2, p3 par3 = d3, \
00311 p4 par4 = d4, p5 par5 = d5) \
00312 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00313 //-----------------------------------------------------------------------------
00314 #define SAGA_CALL_PUB_5_DEF_4(name, p1, p2, d2, p3, d3, p4, d4, p5, d5) \
00315 template <typename Tag> \
00316 saga::task name (p1 par1, p2 par2 = d2, p3 par3 = d3, \
00317 p4 par4 = d4, p5 par5 = d5) \
00318 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00319 //-----------------------------------------------------------------------------
00320 #define SAGA_CALL_PUB_5_DEF_5(name, p1, d1, p2, d2, p3, d3, p4, d4, p5, d5) \
00321 template <typename Tag> \
00322 saga::task name (p1 par1 = d1, p2 par2 = d2, p3 par3 = d3, \
00323 p4 par4 = d4, p5 par5 = d5) \
00324 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00325 //-----------------------------------------------------------------------------
00326
00327
00328 #define SAGA_CALL_CONST_PUB_5_DEF_0(name, p1, p2, p3, p4, p5) \
00329 template <typename Tag> \
00330 saga::task name (p1 par1, p2 par2, p3 par3, p5 par5) const \
00331 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00332 //-----------------------------------------------------------------------------
00333 #define SAGA_CALL_CONST_PUB_5_DEF_1(name, p1, p2, p3, p4, p5, d5) \
00334 template <typename Tag> \
00335 saga::task name (p1 par1, p2 par2, p3 par3, p4 par4, \
00336 p5 par5 = d5) const \
00337 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00338 //-----------------------------------------------------------------------------
00339 #define SAGA_CALL_CONST_PUB_5_DEF_2(name, p1, p2, p3, p4, d4, p5, d5) \
00340 template <typename Tag> \
00341 saga::task name (p1 par1, p2 par2, p3 par3, p4 par4 = d4, \
00342 p5 par5 = d5) const \
00343 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00344 //-----------------------------------------------------------------------------
00345 #define SAGA_CALL_CONST_PUB_5_DEF_3(name, p1, p2, p3, d3, p4, d4, p5, d5) \
00346 template <typename Tag> \
00347 saga::task name (p1 par1, p2 par2, p3 par3 = d3, p4 par4 = d4, \
00348 p5 par5 = d5) const \
00349 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00350 //-----------------------------------------------------------------------------
00351 #define SAGA_CALL_CONST_PUB_5_DEF_4(name, p1, p2, d2, p3, d3, p4, d4, p5, d5) \
00352 template <typename Tag> \
00353 saga::task name (p1 par1, p2 par2 = d2, p3 par3 = d3, \
00354 p4 par4 = d4, p5 par5 = d5) const \
00355 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00356 //-----------------------------------------------------------------------------
00357 #define SAGA_CALL_CONST_PUB_5_DEF_5(name, p1, d1, p2, d2, p3, d3, p4, d4, \
00358 p5, d5) \
00359 template <typename Tag> \
00360 saga::task name (p1 par1 = d1, p2 par2 = d2, p3 par3 = d3, \
00361 p4 par4 = d4, p5 par5 = d5) const \
00362 { return (name ## priv (par1, par2, par3, par4, par5, Tag())); } \
00363 //-----------------------------------------------------------------------------
00364
00365
00366 #define SAGA_CALL_PRIV_5(name, p1, p2, p3, p4, p5) \
00367 saga::task name ## priv (p1, p2, p3, p4, p5, saga::task_base::Sync); \
00368 saga::task name ## priv (p1, p2, p3, p4, p5, saga::task_base::ASync); \
00369 saga::task name ## priv (p1, p2, p3, p4, p5, saga::task_base::Task); \
00370 //-----------------------------------------------------------------------------
00371 #define SAGA_CALL_CONST_PRIV_5(name, p1, p2, p3, p4, p5) \
00372 saga::task name ## priv (p1, p2, p3, p4, p5, saga::task_base::Sync) const; \
00373 saga::task name ## priv (p1, p2, p3, p4, p5, saga::task_base::ASync) const; \
00374 saga::task name ## priv (p1, p2, p3, p4, p5, saga::task_base::Task) const; \
00375 //-----------------------------------------------------------------------------
00376
00378
00379 #endif // SAGA_CALL_HPP
00380