AFEPack
|
00001 00138 template <typename Return 00139 #if ARG>=1 00140 ,typename Arg1 00141 #endif 00142 #if ARG>=2 00143 ,typename Arg2 00144 #endif 00145 #if ARG>=3 00146 ,typename Arg3 00147 #endif 00148 #if ARG>=4 00149 ,typename Arg4 00150 #endif 00151 #if ARG>=5 00152 ,typename Arg5 00153 #endif 00154 #if ARG>=6 00155 ,typename Arg6 00156 #endif 00157 #if ARG>=7 00158 ,typename Arg7 00159 #endif 00160 #if ARG>=8 00161 ,typename Arg8 00162 #endif 00163 #if ARG>=9 00164 ,typename Arg9 00165 #endif 00166 #if ARG>=10 00167 ,typename Arg10 00168 #endif 00169 ,typename Class=NullThread> 00170 struct CLASSNAME 00171 { 00172 public: 00173 00174 typedef Return (*FunPtr)( 00175 #if ARG>=1 00176 Arg1 00177 #endif 00178 #if ARG>=2 00179 ,Arg2 00180 #endif 00181 #if ARG>=3 00182 ,Arg3 00183 #endif 00184 #if ARG>=4 00185 ,Arg4 00186 #endif 00187 #if ARG>=5 00188 ,Arg5 00189 #endif 00190 #if ARG>=6 00191 ,Arg6 00192 #endif 00193 #if ARG>=7 00194 ,Arg7 00195 #endif 00196 #if ARG>=8 00197 ,Arg8 00198 #endif 00199 #if ARG>=9 00200 ,Arg9 00201 #endif 00202 #if ARG>=10 00203 ,Arg10 00204 #endif 00205 ); 00206 00207 struct FunData 00208 { 00209 public: 00210 FunPtr fun_ptr; 00211 #if ARG>=1 00212 Arg1 arg1; 00213 #endif 00214 #if ARG>=2 00215 Arg2 arg2; 00216 #endif 00217 #if ARG>=3 00218 Arg3 arg3; 00219 #endif 00220 #if ARG>=4 00221 Arg4 arg4; 00222 #endif 00223 #if ARG>=5 00224 Arg5 arg5; 00225 #endif 00226 #if ARG>=6 00227 Arg6 arg6; 00228 #endif 00229 #if ARG>=7 00230 Arg7 arg7; 00231 #endif 00232 #if ARG>=8 00233 Arg8 arg8; 00234 #endif 00235 #if ARG>=9 00236 Arg9 arg9; 00237 #endif 00238 #if ARG>=10 00239 Arg10 arg10; 00240 #endif 00241 FunData(FunPtr _fun_ptr 00242 #if ARG>=1 00243 ,Arg1 _arg1 00244 #endif 00245 #if ARG>=2 00246 ,Arg2 _arg2 00247 #endif 00248 #if ARG>=3 00249 ,Arg3 _arg3 00250 #endif 00251 #if ARG>=4 00252 ,Arg4 _arg4 00253 #endif 00254 #if ARG>=5 00255 ,Arg5 _arg5 00256 #endif 00257 #if ARG>=6 00258 ,Arg6 _arg6 00259 #endif 00260 #if ARG>=7 00261 ,Arg7 _arg7 00262 #endif 00263 #if ARG>=8 00264 ,Arg8 _arg8 00265 #endif 00266 #if ARG>=9 00267 ,Arg9 _arg9 00268 #endif 00269 #if ARG>=10 00270 ,Arg10 _arg10 00271 #endif 00272 ) : 00273 fun_ptr(_fun_ptr) 00274 #if ARG>=1 00275 ,arg1(_arg1) 00276 #endif 00277 #if ARG>=2 00278 ,arg2(_arg2) 00279 #endif 00280 #if ARG>=3 00281 ,arg3(_arg3) 00282 #endif 00283 #if ARG>=4 00284 ,arg4(_arg4) 00285 #endif 00286 #if ARG>=5 00287 ,arg5(_arg5) 00288 #endif 00289 #if ARG>=6 00290 ,arg6(_arg6) 00291 #endif 00292 #if ARG>=7 00293 ,arg7(_arg7) 00294 #endif 00295 #if ARG>=8 00296 ,arg8(_arg8) 00297 #endif 00298 #if ARG>=9 00299 ,arg9(_arg9) 00300 #endif 00301 #if ARG>=10 00302 ,arg10(_arg10) 00303 #endif 00304 {}; 00305 FunData(const FunData& _fd) : 00306 fun_ptr(_fd.fun_ptr) 00307 #if ARG>=1 00308 ,arg1(_fd.arg1) 00309 #endif 00310 #if ARG>=2 00311 ,arg2(_fd.arg2) 00312 #endif 00313 #if ARG>=3 00314 ,arg3(_fd.arg3) 00315 #endif 00316 #if ARG>=4 00317 ,arg4(_fd.arg4) 00318 #endif 00319 #if ARG>=5 00320 ,arg5(_fd.arg5) 00321 #endif 00322 #if ARG>=6 00323 ,arg6(_fd.arg6) 00324 #endif 00325 #if ARG>=7 00326 ,arg7(_fd.arg7) 00327 #endif 00328 #if ARG>=8 00329 ,arg8(_fd.arg8) 00330 #endif 00331 #if ARG>=9 00332 ,arg9(_fd.arg9) 00333 #endif 00334 #if ARG>=10 00335 ,arg10(_fd.arg10) 00336 #endif 00337 {}; 00338 FunData& operator=(const FunData& _fd) 00339 { 00340 fun_ptr = _fd.fun_ptr; 00341 #if ARG>=1 00342 arg1 = _fd.arg1; 00343 #endif 00344 #if ARG>=2 00345 arg2 = _fd.arg2; 00346 #endif 00347 #if ARG>=3 00348 arg3 = _fd.arg3; 00349 #endif 00350 #if ARG>=4 00351 arg4 = _fd.arg4; 00352 #endif 00353 #if ARG>=5 00354 arg5 = _fd.arg5; 00355 #endif 00356 #if ARG>=6 00357 arg6 = _fd.arg6; 00358 #endif 00359 #if ARG>=7 00360 arg7 = _fd.arg7; 00361 #endif 00362 #if ARG>=8 00363 arg8 = _fd.arg8; 00364 #endif 00365 #if ARG>=9 00366 arg9 = _fd.arg9; 00367 #endif 00368 #if ARG>=10 00369 arg10 = _fd.arg10; 00370 #endif 00371 return *this; 00372 }; 00373 static void * thread_entry(void *arg_ptr) { 00374 FunData * mfd = reinterpret_cast<FunData *>(arg_ptr); 00375 (*(mfd->fun_ptr))( 00376 #if ARG>=1 00377 mfd->arg1 00378 #endif 00379 #if ARG>=2 00380 , mfd->arg2 00381 #endif 00382 #if ARG>=3 00383 , mfd->arg3 00384 #endif 00385 #if ARG>=4 00386 , mfd->arg4 00387 #endif 00388 #if ARG>=5 00389 , mfd->arg5 00390 #endif 00391 #if ARG>=6 00392 , mfd->arg6 00393 #endif 00394 #if ARG>=7 00395 , mfd->arg7 00396 #endif 00397 #if ARG>=8 00398 , mfd->arg8 00399 #endif 00400 #if ARG>=9 00401 , mfd->arg9 00402 #endif 00403 #if ARG>=10 00404 , mfd->arg10 00405 #endif 00406 ); 00407 return NULL; 00408 }; 00409 00410 }; 00411 00412 class ArgCollector 00413 { 00414 public: 00415 typedef FunData FunDataType; 00416 FunPtr fun_ptr; 00417 00418 ArgCollector (FunPtr _fun_ptr_) { 00419 fun_ptr = _fun_ptr_; 00420 }; 00421 00422 FunData collectArgs ( 00423 #if ARG>=1 00424 Arg1 _arg1 00425 #endif 00426 #if ARG>=2 00427 ,Arg2 _arg2 00428 #endif 00429 #if ARG>=3 00430 ,Arg3 _arg3 00431 #endif 00432 #if ARG>=4 00433 ,Arg4 _arg4 00434 #endif 00435 #if ARG>=5 00436 ,Arg5 _arg5 00437 #endif 00438 #if ARG>=6 00439 ,Arg6 _arg6 00440 #endif 00441 #if ARG>=7 00442 ,Arg7 _arg7 00443 #endif 00444 #if ARG>=8 00445 ,Arg8 _arg8 00446 #endif 00447 #if ARG>=9 00448 ,Arg9 _arg9 00449 #endif 00450 #if ARG>=10 00451 ,Arg10 _arg10 00452 #endif 00453 ) { 00454 return FunData(fun_ptr 00455 #if ARG>=1 00456 , _arg1 00457 #endif 00458 #if ARG>=2 00459 , _arg2 00460 #endif 00461 #if ARG>=3 00462 , _arg3 00463 #endif 00464 #if ARG>=4 00465 , _arg4 00466 #endif 00467 #if ARG>=5 00468 , _arg5 00469 #endif 00470 #if ARG>=6 00471 , _arg6 00472 #endif 00473 #if ARG>=7 00474 , _arg7 00475 #endif 00476 #if ARG>=8 00477 , _arg8 00478 #endif 00479 #if ARG>=9 00480 , _arg9 00481 #endif 00482 #if ARG>=10 00483 , _arg10 00484 #endif 00485 ); 00486 }; 00487 00488 }; 00489 00490 typedef Return (Class::*MemFunPtr)( 00491 #if ARG>=1 00492 Arg1 00493 #endif 00494 #if ARG>=2 00495 ,Arg2 00496 #endif 00497 #if ARG>=3 00498 ,Arg3 00499 #endif 00500 #if ARG>=4 00501 ,Arg4 00502 #endif 00503 #if ARG>=5 00504 ,Arg5 00505 #endif 00506 #if ARG>=6 00507 ,Arg6 00508 #endif 00509 #if ARG>=7 00510 ,Arg7 00511 #endif 00512 #if ARG>=8 00513 ,Arg8 00514 #endif 00515 #if ARG>=9 00516 ,Arg9 00517 #endif 00518 #if ARG>=10 00519 ,Arg10 00520 #endif 00521 ); 00522 00523 struct MemFunData 00524 { 00525 public: 00526 MemFunPtr mem_fun_ptr; 00527 Class * object; 00528 #if ARG>=1 00529 Arg1 arg1; 00530 #endif 00531 #if ARG>=2 00532 Arg2 arg2; 00533 #endif 00534 #if ARG>=3 00535 Arg3 arg3; 00536 #endif 00537 #if ARG>=4 00538 Arg4 arg4; 00539 #endif 00540 #if ARG>=5 00541 Arg5 arg5; 00542 #endif 00543 #if ARG>=6 00544 Arg6 arg6; 00545 #endif 00546 #if ARG>=7 00547 Arg7 arg7; 00548 #endif 00549 #if ARG>=8 00550 Arg8 arg8; 00551 #endif 00552 #if ARG>=9 00553 Arg9 arg9; 00554 #endif 00555 #if ARG>=10 00556 Arg10 arg10; 00557 #endif 00558 MemFunData(MemFunPtr _mem_fun_ptr 00559 ,Class * _object 00560 #if ARG>=1 00561 ,Arg1 _arg1 00562 #endif 00563 #if ARG>=2 00564 ,Arg2 _arg2 00565 #endif 00566 #if ARG>=3 00567 ,Arg3 _arg3 00568 #endif 00569 #if ARG>=4 00570 ,Arg4 _arg4 00571 #endif 00572 #if ARG>=5 00573 ,Arg5 _arg5 00574 #endif 00575 #if ARG>=6 00576 ,Arg6 _arg6 00577 #endif 00578 #if ARG>=7 00579 ,Arg7 _arg7 00580 #endif 00581 #if ARG>=8 00582 ,Arg8 _arg8 00583 #endif 00584 #if ARG>=9 00585 ,Arg9 _arg9 00586 #endif 00587 #if ARG>=10 00588 ,Arg10 _arg10 00589 #endif 00590 ) : 00591 mem_fun_ptr(_mem_fun_ptr) 00592 ,object(_object) 00593 #if ARG>=1 00594 ,arg1(_arg1) 00595 #endif 00596 #if ARG>=2 00597 ,arg2(_arg2) 00598 #endif 00599 #if ARG>=3 00600 ,arg3(_arg3) 00601 #endif 00602 #if ARG>=4 00603 ,arg4(_arg4) 00604 #endif 00605 #if ARG>=5 00606 ,arg5(_arg5) 00607 #endif 00608 #if ARG>=6 00609 ,arg6(_arg6) 00610 #endif 00611 #if ARG>=7 00612 ,arg7(_arg7) 00613 #endif 00614 #if ARG>=8 00615 ,arg8(_arg8) 00616 #endif 00617 #if ARG>=9 00618 ,arg9(_arg9) 00619 #endif 00620 #if ARG>=10 00621 ,arg10(_arg10) 00622 #endif 00623 {}; 00624 MemFunData(const MemFunData& _mfd) : 00625 mem_fun_ptr(_mfd.mem_fun_ptr) 00626 ,object(_mfd.object) 00627 #if ARG>=1 00628 ,arg1(_mfd.arg1) 00629 #endif 00630 #if ARG>=2 00631 ,arg2(_mfd.arg2) 00632 #endif 00633 #if ARG>=3 00634 ,arg3(_mfd.arg3) 00635 #endif 00636 #if ARG>=4 00637 ,arg4(_mfd.arg4) 00638 #endif 00639 #if ARG>=5 00640 ,arg5(_mfd.arg5) 00641 #endif 00642 #if ARG>=6 00643 ,arg6(_mfd.arg6) 00644 #endif 00645 #if ARG>=7 00646 ,arg7(_mfd.arg7) 00647 #endif 00648 #if ARG>=8 00649 ,arg8(_mfd.arg8) 00650 #endif 00651 #if ARG>=9 00652 ,arg9(_mfd.arg9) 00653 #endif 00654 #if ARG>=10 00655 ,arg10(_mfd.arg10) 00656 #endif 00657 {}; 00658 MemFunData& operator=(const MemFunData& _mfd) 00659 { 00660 mem_fun_ptr = _mfd.mem_fun_ptr; 00661 object = _mfd.object; 00662 #if ARG>=1 00663 arg1 = _mfd.arg1; 00664 #endif 00665 #if ARG>=2 00666 arg2 = _mfd.arg2; 00667 #endif 00668 #if ARG>=3 00669 arg3 = _mfd.arg3; 00670 #endif 00671 #if ARG>=4 00672 arg4 = _mfd.arg4; 00673 #endif 00674 #if ARG>=5 00675 arg5 = _mfd.arg5; 00676 #endif 00677 #if ARG>=6 00678 arg6 = _mfd.arg6; 00679 #endif 00680 #if ARG>=7 00681 arg7 = _mfd.arg7; 00682 #endif 00683 #if ARG>=8 00684 arg8 = _mfd.arg8; 00685 #endif 00686 #if ARG>=9 00687 arg9 = _mfd.arg9; 00688 #endif 00689 #if ARG>=10 00690 arg10 = _mfd.arg10; 00691 #endif 00692 return *this; 00693 }; 00694 static void * thread_entry(void *arg_ptr) { 00695 MemFunData * mfd = reinterpret_cast<MemFunData *>(arg_ptr); 00696 ((mfd->object)->*(mfd->mem_fun_ptr))( 00697 #if ARG>=1 00698 mfd->arg1 00699 #endif 00700 #if ARG>=2 00701 , mfd->arg2 00702 #endif 00703 #if ARG>=3 00704 , mfd->arg3 00705 #endif 00706 #if ARG>=4 00707 , mfd->arg4 00708 #endif 00709 #if ARG>=5 00710 , mfd->arg5 00711 #endif 00712 #if ARG>=6 00713 , mfd->arg6 00714 #endif 00715 #if ARG>=7 00716 , mfd->arg7 00717 #endif 00718 #if ARG>=8 00719 , mfd->arg8 00720 #endif 00721 #if ARG>=9 00722 , mfd->arg9 00723 #endif 00724 #if ARG>=10 00725 , mfd->arg10 00726 #endif 00727 ); 00728 return NULL; 00729 }; 00730 00731 }; 00732 00733 class MemArgCollector 00734 { 00735 public: 00736 typedef MemFunData FunDataType; 00737 MemFunPtr mem_fun_ptr; 00738 00739 MemArgCollector (MemFunPtr _mem_fun_ptr_) { 00740 mem_fun_ptr = _mem_fun_ptr_; 00741 }; 00742 00743 MemFunData collectArgs (Class * object 00744 #if ARG>=1 00745 ,Arg1 _arg1 00746 #endif 00747 #if ARG>=2 00748 ,Arg2 _arg2 00749 #endif 00750 #if ARG>=3 00751 ,Arg3 _arg3 00752 #endif 00753 #if ARG>=4 00754 ,Arg4 _arg4 00755 #endif 00756 #if ARG>=5 00757 ,Arg5 _arg5 00758 #endif 00759 #if ARG>=6 00760 ,Arg6 _arg6 00761 #endif 00762 #if ARG>=7 00763 ,Arg7 _arg7 00764 #endif 00765 #if ARG>=8 00766 ,Arg8 _arg8 00767 #endif 00768 #if ARG>=9 00769 ,Arg9 _arg9 00770 #endif 00771 #if ARG>=10 00772 ,Arg10 _arg10 00773 #endif 00774 ) { 00775 return MemFunData(mem_fun_ptr 00776 ,object 00777 #if ARG>=1 00778 , _arg1 00779 #endif 00780 #if ARG>=2 00781 , _arg2 00782 #endif 00783 #if ARG>=3 00784 , _arg3 00785 #endif 00786 #if ARG>=4 00787 , _arg4 00788 #endif 00789 #if ARG>=5 00790 , _arg5 00791 #endif 00792 #if ARG>=6 00793 , _arg6 00794 #endif 00795 #if ARG>=7 00796 , _arg7 00797 #endif 00798 #if ARG>=8 00799 , _arg8 00800 #endif 00801 #if ARG>=9 00802 , _arg9 00803 #endif 00804 #if ARG>=10 00805 , _arg10 00806 #endif 00807 ); 00808 }; 00809 }; 00810 }; 00811 00812 template <typename Return 00813 #if ARG>=1 00814 ,typename Arg1 00815 #endif 00816 #if ARG>=2 00817 ,typename Arg2 00818 #endif 00819 #if ARG>=3 00820 ,typename Arg3 00821 #endif 00822 #if ARG>=4 00823 ,typename Arg4 00824 #endif 00825 #if ARG>=5 00826 ,typename Arg5 00827 #endif 00828 #if ARG>=6 00829 ,typename Arg6 00830 #endif 00831 #if ARG>=7 00832 ,typename Arg7 00833 #endif 00834 #if ARG>=8 00835 ,typename Arg8 00836 #endif 00837 #if ARG>=9 00838 ,typename Arg9 00839 #endif 00840 #if ARG>=10 00841 ,typename Arg10 00842 #endif 00843 > 00844 typename CLASSNAME<Return 00845 #if ARG>=1 00846 , Arg1 00847 #endif 00848 #if ARG>=2 00849 , Arg2 00850 #endif 00851 #if ARG>=3 00852 , Arg3 00853 #endif 00854 #if ARG>=4 00855 , Arg4 00856 #endif 00857 #if ARG>=5 00858 , Arg5 00859 #endif 00860 #if ARG>=6 00861 , Arg6 00862 #endif 00863 #if ARG>=7 00864 , Arg7 00865 #endif 00866 #if ARG>=8 00867 , Arg8 00868 #endif 00869 #if ARG>=9 00870 , Arg9 00871 #endif 00872 #if ARG>=10 00873 , Arg10 00874 #endif 00875 >::ArgCollector encapsulate(Return (*_fun_ptr)( 00876 #if ARG>=1 00877 Arg1 00878 #endif 00879 #if ARG>=2 00880 , Arg2 00881 #endif 00882 #if ARG>=3 00883 , Arg3 00884 #endif 00885 #if ARG>=4 00886 , Arg4 00887 #endif 00888 #if ARG>=5 00889 , Arg5 00890 #endif 00891 #if ARG>=6 00892 , Arg6 00893 #endif 00894 #if ARG>=7 00895 , Arg7 00896 #endif 00897 #if ARG>=8 00898 , Arg8 00899 #endif 00900 #if ARG>=9 00901 , Arg9 00902 #endif 00903 #if ARG>=10 00904 , Arg10 00905 #endif 00906 )) { 00907 return typename CLASSNAME<Return 00908 #if ARG>=1 00909 , Arg1 00910 #endif 00911 #if ARG>=2 00912 , Arg2 00913 #endif 00914 #if ARG>=3 00915 , Arg3 00916 #endif 00917 #if ARG>=4 00918 , Arg4 00919 #endif 00920 #if ARG>=5 00921 , Arg5 00922 #endif 00923 #if ARG>=6 00924 , Arg6 00925 #endif 00926 #if ARG>=7 00927 , Arg7 00928 #endif 00929 #if ARG>=8 00930 , Arg8 00931 #endif 00932 #if ARG>=9 00933 , Arg9 00934 #endif 00935 #if ARG>=10 00936 , Arg10 00937 #endif 00938 >::ArgCollector(_fun_ptr); 00939 }; 00940 00941 template <typename Return 00942 #if ARG>=1 00943 ,typename Arg1 00944 #endif 00945 #if ARG>=2 00946 ,typename Arg2 00947 #endif 00948 #if ARG>=3 00949 ,typename Arg3 00950 #endif 00951 #if ARG>=4 00952 ,typename Arg4 00953 #endif 00954 #if ARG>=5 00955 ,typename Arg5 00956 #endif 00957 #if ARG>=6 00958 ,typename Arg6 00959 #endif 00960 #if ARG>=7 00961 ,typename Arg7 00962 #endif 00963 #if ARG>=8 00964 ,typename Arg8 00965 #endif 00966 #if ARG>=9 00967 ,typename Arg9 00968 #endif 00969 #if ARG>=10 00970 ,typename Arg10 00971 #endif 00972 ,typename Class> 00973 typename CLASSNAME<Return 00974 #if ARG>=1 00975 , Arg1 00976 #endif 00977 #if ARG>=2 00978 , Arg2 00979 #endif 00980 #if ARG>=3 00981 , Arg3 00982 #endif 00983 #if ARG>=4 00984 , Arg4 00985 #endif 00986 #if ARG>=5 00987 , Arg5 00988 #endif 00989 #if ARG>=6 00990 , Arg6 00991 #endif 00992 #if ARG>=7 00993 , Arg7 00994 #endif 00995 #if ARG>=8 00996 , Arg8 00997 #endif 00998 #if ARG>=9 00999 , Arg9 01000 #endif 01001 #if ARG>=10 01002 , Arg10 01003 #endif 01004 ,Class>::MemArgCollector encapsulate(Return (Class::*_mem_fun_ptr)( 01005 #if ARG>=1 01006 Arg1 01007 #endif 01008 #if ARG>=2 01009 , Arg2 01010 #endif 01011 #if ARG>=3 01012 , Arg3 01013 #endif 01014 #if ARG>=4 01015 , Arg4 01016 #endif 01017 #if ARG>=5 01018 , Arg5 01019 #endif 01020 #if ARG>=6 01021 , Arg6 01022 #endif 01023 #if ARG>=7 01024 , Arg7 01025 #endif 01026 #if ARG>=8 01027 , Arg8 01028 #endif 01029 #if ARG>=9 01030 , Arg9 01031 #endif 01032 #if ARG>=10 01033 , Arg10 01034 #endif 01035 )) { 01036 return typename CLASSNAME<Return 01037 #if ARG>=1 01038 , Arg1 01039 #endif 01040 #if ARG>=2 01041 , Arg2 01042 #endif 01043 #if ARG>=3 01044 , Arg3 01045 #endif 01046 #if ARG>=4 01047 , Arg4 01048 #endif 01049 #if ARG>=5 01050 , Arg5 01051 #endif 01052 #if ARG>=6 01053 , Arg6 01054 #endif 01055 #if ARG>=7 01056 , Arg7 01057 #endif 01058 #if ARG>=8 01059 , Arg8 01060 #endif 01061 #if ARG>=9 01062 , Arg9 01063 #endif 01064 #if ARG>=10 01065 , Arg10 01066 #endif 01067 ,Class>::MemArgCollector(_mem_fun_ptr); 01068 }; 01069 01070