00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00035
00036
00037 #pragma once
00038
00039 #ifndef _FOR_ALL_H_
00040 #define _FOR_ALL_H_
00041
00042 #include <algorithm>
00043 #include <functional>
00044 #include <map>
00045 #include "arg_info.h"
00046
00047 namespace mbo
00048 {
00049
00050
00056 template<typename _Tret
00057 , typename _Ty
00058 , typename _Targ1 = void
00059 , typename _Targ2 = void
00060 , typename _Targ3 = void
00061 , typename _Targ4 = void
00062 , typename _Targ5 = void
00063 , typename _Targ6 = void
00064 , typename _Targ7 = void
00065 , typename _Targ8 = void
00066 , typename _Targ9 = void
00067 >
00068 struct func_type_info_t
00069 : public std::unary_function<_Ty, _Tret>
00070 {
00071 public:
00072 typedef typename arg_info<_Targ1>::argument_t arg1_t;
00073 typedef typename arg_info<_Targ1>::variable_t var1_t;
00074 typedef typename arg_info<_Targ2>::argument_t arg2_t;
00075 typedef typename arg_info<_Targ2>::variable_t var2_t;
00076 typedef typename arg_info<_Targ3>::argument_t arg3_t;
00077 typedef typename arg_info<_Targ3>::variable_t var3_t;
00078 typedef typename arg_info<_Targ4>::argument_t arg4_t;
00079 typedef typename arg_info<_Targ4>::variable_t var4_t;
00080 typedef typename arg_info<_Targ5>::argument_t arg5_t;
00081 typedef typename arg_info<_Targ5>::variable_t var5_t;
00082 typedef typename arg_info<_Targ6>::argument_t arg6_t;
00083 typedef typename arg_info<_Targ6>::variable_t var6_t;
00084 typedef typename arg_info<_Targ7>::argument_t arg7_t;
00085 typedef typename arg_info<_Targ7>::variable_t var7_t;
00086 typedef typename arg_info<_Targ8>::argument_t arg8_t;
00087 typedef typename arg_info<_Targ8>::variable_t var8_t;
00088 typedef typename arg_info<_Targ9>::argument_t arg9_t;
00089 typedef typename arg_info<_Targ9>::variable_t var9_t;
00090 };
00091
00092
00096 template<class _Ty, typename _Tret, typename _Targ>
00097 struct obj_func_t
00098 : public func_type_info_t<_Tret, _Ty, _Targ>
00099 {
00100 public:
00101 typedef _Ty obj_t;
00102 typedef typename result_type (_Ty::*func_t)(arg1_t);
00103
00104 obj_func_t(obj_t& obj, func_t func)
00105 : m_obj(obj)
00106 , m_func(func)
00107 {
00108 }
00109
00110 result_type operator() (arg1_t arg1)
00111 {
00112 return (m_obj.*m_func)(arg1);
00113 }
00114
00115 protected:
00116
00117 obj_t& m_obj;
00118 func_t m_func;
00119 };
00120
00121 template<class _Ty, typename _Tret, typename _Targ>
00122 struct obj_func_t<const _Ty, _Tret, _Targ>
00123 : public func_type_info_t<_Tret, _Ty, _Targ>
00124 {
00125 public:
00126 typedef _Ty obj_t;
00127 typedef result_type (_Ty::*func_t)(arg1_t);
00128
00129 obj_func_t(obj_t& obj, func_t func)
00130 : m_obj(obj)
00131 , m_func(func)
00132 {
00133 }
00134
00135 result_type operator() (arg1_t arg1) const
00136 {
00137 return (m_obj.*m_func)(arg1);
00138 }
00139
00140 protected:
00141
00142 obj_t& m_obj;
00143 func_t m_func;
00144 };
00145
00146 template<class _Ty, typename _Tret, typename _Targ, typename _Targ2>
00147 struct obj_func_1_t
00148 : public func_type_info_t<_Tret, _Ty, _Targ, _Targ2>
00149 {
00150 public:
00151 typedef typename _Ty obj_t;
00152 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t);
00153
00154 obj_func_1_t(obj_t& obj, func_t func, arg2_t _arg2)
00155 : m_obj(obj)
00156 , m_func(func)
00157 , m_arg2(_arg2)
00158 {
00159 }
00160
00161 result_type operator() (arg1_t arg1)
00162 {
00163 return (m_obj.*m_func)(arg1, m_arg2);
00164 }
00165
00166 protected:
00167
00168 obj_t& m_obj;
00169 func_t m_func;
00170 arg2_t m_arg2;
00171 };
00172
00173 template<class _Ty, typename _Tret, typename _Targ, typename _Targ2>
00174 struct obj_func_1_t<const _Ty, _Tret, _Targ, _Targ2>
00175 : public func_type_info_t<_Tret, _Ty, _Targ, _Targ2>
00176 {
00177 public:
00178 typedef _Ty obj_t;
00179 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t);
00180
00181 obj_func_1_t(obj_t& obj, func_t func, arg2_t arg2)
00182 : m_obj(obj)
00183 , m_func(func)
00184 , m_arg2(arg2)
00185 {
00186 }
00187
00188 result_type operator() (arg1_t arg1) const
00189 {
00190 return (m_obj.*m_func)(arg1, m_arg2);
00191 }
00192
00193 protected:
00194
00195 obj_t& m_obj;
00196 func_t m_func;
00197 arg2_t m_arg2;
00198 };
00199
00200 template<class _Ty, typename _Tret, typename _Targ, typename _Targ2, typename _Targ3>
00201 struct obj_func_2_t
00202 : public func_type_info_t<_Tret, _Ty, _Targ, _Targ2, _Targ3>
00203 {
00204 public:
00205 typedef _Ty obj_t;
00206 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t);
00207
00208 obj_func_2_t(obj_t& obj, func_t func, arg2_t arg2, arg3_t arg3)
00209 : m_obj(obj)
00210 , m_func(func)
00211 , m_arg2(arg2)
00212 , m_arg3(arg3)
00213 {
00214 }
00215
00216 result_type operator() (arg1_t arg1)
00217 {
00218 return (m_obj.*m_func)(arg1, m_arg2, m_arg3);
00219 }
00220
00221 protected:
00222
00223 obj_t& m_obj;
00224 func_t m_func;
00225 arg2_t m_arg2;
00226 arg3_t m_arg3;
00227 };
00228
00229 template<class _Ty, typename _Tret, typename _Targ, typename _Targ2, typename _Targ3>
00230 struct obj_func_2_t<const _Ty, _Tret, _Targ, _Targ2, _Targ3>
00231 : public func_type_info_t<_Tret, _Ty, _Targ, _Targ2, _Targ3>
00232 {
00233 public:
00234 typedef _Ty obj_t;
00235 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t);
00236
00237 obj_func_2_t(obj_t& obj, func_t func, arg2_t arg2, arg3_t arg3)
00238 : m_obj(obj)
00239 , m_func(func)
00240 , m_arg2(arg2)
00241 , m_arg3(arg3)
00242 {
00243 }
00244
00245 result_type operator() (arg1_t arg1) const
00246 {
00247 return (m_obj.*m_func)(arg1, m_arg2, m_arg3);
00248 }
00249
00250 protected:
00251
00252 obj_t& m_obj;
00253 func_t m_func;
00254 arg2_t m_arg2;
00255 arg3_t m_arg3;
00256 };
00257
00260 template<typename _Ty, typename _Tret, typename _Targ>
00261 inline obj_func_t<_Ty, typename _Tret, typename _Targ> obj_func(_Ty& obj, _Tret (_Ty::* func)(_Targ))
00262 {
00263 return obj_func_t<_Ty, _Tret, _Targ>(obj, func);
00264 }
00265
00268 template<typename _Ty, typename _Tret, typename _Targ>
00269 inline obj_func_t<const _Ty, typename _Tret, typename _Targ> obj_func(const _Ty& obj, _Tret (_Ty::* func)(_Targ) const)
00270 {
00271 return obj_func_t<_Ty, _Tret, _Targ>(obj, func);
00272 }
00273
00276 template<typename _Ty, typename _Tret, typename _Targ, typename _Targ2>
00277 inline obj_func_1_t<_Ty, typename _Tret, typename _Targ, typename _Targ2> obj_func(_Ty& obj, _Tret (_Ty::* func)(_Targ, _Targ2), _Targ2 arg2)
00278 {
00279 return obj_func_1_t<_Ty, _Tret, _Targ, _Targ2>(obj, func, arg2);
00280 }
00281
00284 template<typename _Ty, typename _Tret, typename _Targ, typename _Targ2>
00285 inline obj_func_1_t<const _Ty, typename _Tret, typename _Targ, typename _Targ2> obj_func(const _Ty& obj, _Tret (_Ty::* func)(_Targ, _Targ2) const, _Targ2 arg2)
00286 {
00287 return obj_func_1_t<_Ty, _Tret, _Targ, _Targ2>(obj, func, arg2);
00288 }
00289
00292 template<typename _Ty, typename _Tret, typename _Targ, typename _Targ2, typename _Targ3>
00293 inline obj_func_2_t<_Ty, typename _Tret, typename _Targ, typename _Targ2, typename _Targ3>
00294 obj_func(_Ty& obj,
00295 _Tret (_Ty::*func)(_Targ, _Targ2, _Targ3),
00296 typename arg_info<_Targ2>::argument_t arg2,
00297 typename arg_info<_Targ3>::argument_t arg3)
00298 {
00299 return obj_func_2_t<_Ty, _Tret, _Targ, _Targ2, _Targ3>(obj, func, arg2, arg3);
00300 }
00301
00304 template<typename _Ty, typename _Tret, typename _Targ, typename _Targ2, typename _Targ3>
00305 inline obj_func_2_t<const _Ty, typename _Tret, typename _Targ, typename _Targ2, typename _Targ3>
00306 obj_func(const _Ty& obj,
00307 _Tret (_Ty::*func)(_Targ, _Targ2, _Targ3) const,
00308 typename arg_info<_Targ2>::argument_t arg2,
00309 typename arg_info<_Targ3>::argument_t arg3)
00310 {
00311 return obj_func_2_t<const _Ty, _Tret, _Targ, _Targ2, _Targ3>(obj, func, arg2, arg3);
00312 }
00313
00314
00315
00318 template<typename _Tfunc, typename _Ty>
00319 struct all_of_t
00320 : public std::unary_function<typename _Ty, bool>
00321 {
00322 public:
00323 typedef _Tfunc func_t;
00324
00325 all_of_t(func_t func)
00326 : m_func(func)
00327 , m_res(true)
00328 {
00329 }
00330
00331 result_type operator() (argument_type arg)
00332 {
00333
00334
00335 if (!(m_func(arg)))
00336 {
00337 m_res = false;
00338 }
00339 return m_res;
00340 }
00341
00342 operator bool()
00343 {
00344 return m_res;
00345 }
00346
00347 protected:
00348
00349 bool m_res;
00350 func_t m_func;
00351 };
00352
00355 template<typename _Tfunc>
00356 all_of_t<_Tfunc, typename _Tfunc::argument_type> all_of_func(_Tfunc func)
00357 {
00358 return all_of_t<_Tfunc, typename _Tfunc::argument_type>(func);
00359 }
00360
00363 template<typename _Ty, typename _Tfunc>
00364 struct any_of_t
00365 : public std::unary_function<typename _Ty, bool>
00366 {
00367 public:
00368 typedef _Tfunc func_t;
00369
00370 any_of_t(func_t func)
00371 : m_func(func)
00372 , m_res(false)
00373 {
00374 }
00375
00376 result_type operator() (argument_type arg)
00377 {
00378
00379
00380 if (m_func(arg))
00381 {
00382 m_res = true;
00383 }
00384 return m_res;
00385 }
00386
00387 operator bool()
00388 {
00389 return m_res;
00390 }
00391
00392 protected:
00393
00394 bool m_res;
00395 func_t m_func;
00396 };
00397
00400 template<typename _Tfunc>
00401 any_of_t<_Tfunc, typename _Tfunc::argument_type> any_of_func(_Tfunc func)
00402 {
00403 return any_of_t<_Tfunc, typename _Tfunc::argument_type>(func);
00404 }
00405
00406
00410 template<typename _Tpair, typename _Tfunc>
00411 struct pair_first_func_t
00412 : public std::unary_function<_Tpair, _Tfunc>
00413 {
00414 public:
00415 typedef _Tpair pair_t;
00416 typedef _Tfunc func_t;
00417
00418 pair_first_func_t(func_t func)
00419 : m_func(func)
00420 {
00421 }
00422
00423 result_type operator() (pair_t& arg)
00424 {
00425 return m_func(arg.first);
00426 }
00427
00428 protected:
00429
00430 func_t m_func;
00431 };
00432
00435 template<typename _Tpair, typename _Tfunc>
00436 inline pair_first_func_t<_Tpair, _Tfunc> pair_first_func(_Tfunc func)
00437 {
00438 return pair_first_func_t<_Tpair, _Tfunc>(func);
00439 }
00440
00441
00445 template<typename _Tpair, typename _Tret, typename _Tfunc>
00446 struct pair_second_func_t
00447 : public std::unary_function<_Tpair, _Tret>
00448 {
00449 public:
00450 typedef _Tpair pair_t;
00451 typedef _Tfunc func_t;
00452
00453 pair_second_func_t(func_t func)
00454 : m_func(func)
00455 {
00456 }
00457
00458 result_type operator() (pair_t& arg)
00459 {
00460 return m_func(arg.second);
00461 }
00462
00463 protected:
00464
00465 func_t m_func;
00466 };
00467
00470 template<typename _Tpair, typename _Tret, typename _Tfunc>
00471 inline pair_second_func_t<_Tpair, _Tret, _Tfunc> pair_second_func(_Tfunc func)
00472 {
00473 return pair_second_func_t<_Tpair, _Tret, _Tfunc>(func);
00474 }
00475
00476
00479 template<typename _Tret, typename _Tkey, typename _Tval>
00480 struct map_value_func_t
00481 : public std::unary_function<typename std::map<_Tkey, _Tval>::value_type, _Tret>
00482 {
00483 public:
00484 typedef result_type (_Tval::*func_t)();
00485
00486 map_value_func_t(func_t func)
00487 : m_func(func)
00488 {
00489 }
00490
00491 result_type operator() (argument_type& it)
00492 {
00493 return (it.second.*m_func)();
00494 }
00495
00496 protected:
00497
00498 func_t m_func;
00499 };
00500
00503 template<typename _Tret, typename _Tkey, typename _Tval>
00504 struct map_value_func_t<_Tret, _Tkey, _Tval*>
00505 : public std::unary_function<typename std::map<_Tkey, _Tval*>::value_type, _Tret>
00506 {
00507 public:
00508 typedef result_type (_Tval::*func_t)();
00509
00510 map_value_func_t(func_t func)
00511 : m_func(func)
00512 {
00513 }
00514
00515 result_type operator() (argument_type& it)
00516 {
00517 return (it.second->*m_func)();
00518 }
00519
00520 protected:
00521
00522 func_t m_func;
00523 };
00524
00527 template<typename _Tret, typename _Tkey, typename _Tval>
00528 struct const_map_value_func_t
00529 : public std::unary_function<typename std::map<_Tkey, _Tval>::value_type, _Tret>
00530 {
00531 public:
00532 typedef result_type (_Tval::*func_t)() const;
00533
00534 const_map_value_func_t(func_t func)
00535 : m_func(func)
00536 {
00537 }
00538
00539 result_type operator() (const argument_type& it) const
00540 {
00541 return (it.second.*m_func)();
00542 }
00543
00544 protected:
00545
00546 func_t m_func;
00547 };
00548
00551 template<typename _Tret, typename _Tkey, typename _Tval>
00552 struct const_map_value_func_t<_Tret, _Tkey, _Tval*>
00553 : public std::unary_function<typename std::map<_Tkey, _Tval*>::value_type, _Tret>
00554 {
00555 public:
00556 typedef result_type (_Tval::*func_t)() const;
00557
00558 const_map_value_func_t(func_t func)
00559 : m_func(func)
00560 {
00561 }
00562
00563 result_type operator() (const argument_type& it) const
00564 {
00565 return (it.second->*m_func)();
00566 }
00567
00568 protected:
00569
00570 func_t m_func;
00571 };
00572
00577 template<typename _Tret, typename _Ty>
00578 struct value_func_t
00579 : public func_type_info_t<_Tret, _Ty>
00580 {
00581 public:
00582 typedef result_type (_Ty::*func_t)();
00583
00584 value_func_t(func_t func)
00585 : m_func(func)
00586 {
00587 }
00588
00589 result_type operator() (argument_type& p)
00590 {
00591 return (p.*m_func)();
00592 }
00593
00594 protected:
00595 func_t m_func;
00596 };
00597
00600 template<typename _Tret, typename _Ty>
00601 struct value_func_t<_Tret, _Ty*>
00602 : public func_type_info_t<_Tret, _Ty*>
00603 {
00604 public:
00605 typedef result_type (_Ty::*func_t)();
00606
00607 value_func_t(func_t func)
00608 : m_func(func)
00609 {
00610 }
00611
00612 result_type operator() (argument_type p)
00613 {
00614 return (p->*m_func)();
00615 }
00616
00617 protected:
00618 func_t m_func;
00619 };
00620
00623 template<typename _Tret, typename _Ty>
00624 struct const_value_func_t
00625 : public func_type_info_t<_Tret, _Ty>
00626 {
00627 public:
00628 typedef result_type (_Ty::*func_t)();
00629
00630 const_value_func_t(func_t func)
00631 : m_func(func)
00632 {
00633 }
00634
00635 result_type operator() (const argument_type& p) const
00636 {
00637 return (p->*m_func)();
00638 }
00639
00640 protected:
00641 func_t m_func;
00642 };
00643
00646 template<typename _Tret, typename _Ty>
00647 struct const_value_func_t<_Tret, _Ty*>
00648 : public func_type_info_t<_Tret, _Ty*>
00649 {
00650 public:
00651 typedef result_type (_Ty::*func_t)();
00652
00653 const_value_func_t(func_t func)
00654 : m_func(func)
00655 {
00656 }
00657
00658 result_type operator() (const argument_type p) const
00659 {
00660 return (p->*m_func)();
00661 }
00662
00663 protected:
00664 func_t m_func;
00665 };
00666
00669 template<typename _Tret, typename _Ty, typename _Targ1>
00670 struct value_func_1_t
00671 : public func_type_info_t<_Tret, _Ty, _Targ1>
00672 {
00673 public:
00674 typedef result_type (_Ty::*func_t)(arg1_t);
00675
00676 value_func_1_t(func_t func, arg1_t arg1)
00677 : m_func(func)
00678 , m_arg1(arg1)
00679 {
00680 }
00681
00682 result_type operator() (argument_type& p)
00683 {
00684 return (p.*m_func)(m_arg1);
00685 }
00686
00687 protected:
00688 func_t m_func;
00689 var1_t m_arg1;
00690 };
00691
00694 template<typename _Tret, typename _Ty, typename _Targ1>
00695 struct value_func_1_t<_Tret, _Ty*, _Targ1>
00696 : public func_type_info_t<_Tret, _Ty*, _Targ1>
00697 {
00698 public:
00699 typedef result_type (_Ty::*func_t)(arg1_t);
00700
00701 value_func_1_t(func_t func, arg1_t arg1)
00702 : m_func(func)
00703 , m_arg1(arg1)
00704 {
00705 }
00706
00707 result_type operator() (argument_type p)
00708 {
00709 return (p->*m_func)(m_arg1);
00710 }
00711
00712 protected:
00713 func_t m_func;
00714 var1_t m_arg1;
00715 };
00716
00719 template<typename _Tret, typename _Ty, typename _Targ1>
00720 struct const_value_func_1_t
00721 : public func_type_info_t<_Tret, _Ty, _Targ1>
00722 {
00723 public:
00724 typedef result_type (_Ty::*func_t)(arg1_t) const;
00725
00726 const_value_func_1_t(func_t func, arg1_t arg1)
00727 : m_func(func)
00728 , m_arg1(arg1)
00729 {
00730 }
00731
00732 result_type operator() (const argument_type& p) const
00733 {
00734 return (p->*m_func)(m_arg1);
00735 }
00736
00737 protected:
00738 func_t m_func;
00739 var1_t m_arg1;
00740 };
00741
00744 template<typename _Tret, typename _Ty, typename _Targ1>
00745 struct const_value_func_1_t<_Tret, _Ty*, _Targ1>
00746 : public func_type_info_t<_Tret, _Ty*, _Targ1>
00747 {
00748 public:
00749 typedef result_type (_Ty::*func_t)(arg1_t) const;
00750
00751 const_value_func_1_t(func_t func, arg1_t arg1)
00752 : m_func(func)
00753 , m_arg1(arg1)
00754 {
00755 }
00756
00757 result_type operator() (const argument_type p) const
00758 {
00759 return (p->*m_func)(m_arg1);
00760 }
00761
00762 protected:
00763 func_t m_func;
00764 var1_t m_arg1;
00765 };
00766
00769 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2>
00770 struct value_func_2_t
00771 : public func_type_info_t<_Tret, _Ty, _Targ1, _Targ2>
00772 {
00773 public:
00774 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t);
00775
00776 value_func_2_t(func_t func, arg1_t arg1, arg2_t arg2)
00777 : m_func(func)
00778 , m_arg1(arg1)
00779 , m_arg2(arg2)
00780 {
00781 }
00782
00783 result_type operator() (argument_type& p)
00784 {
00785 return (p.*m_func)(m_arg1, m_arg2);
00786 }
00787
00788 protected:
00789 func_t m_func;
00790 var1_t m_arg1;
00791 var2_t m_arg2;
00792 };
00793
00796 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2>
00797 struct value_func_2_t<_Tret, _Ty*, _Targ1, _Targ2>
00798 : public func_type_info_t<_Tret, _Ty*, _Targ1, _Targ2>
00799 {
00800 public:
00801 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t);
00802
00803 value_func_2_t(func_t func, arg1_t arg1, arg2_t arg2)
00804 : m_func(func)
00805 , m_arg1(arg1)
00806 , m_arg2(arg2)
00807 {
00808 }
00809
00810 result_type operator() (argument_type p)
00811 {
00812 return (p->*m_func)(m_arg1, m_arg2);
00813 }
00814
00815 protected:
00816 func_t m_func;
00817 var1_t m_arg1;
00818 var2_t m_arg2;
00819 };
00820
00823 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2>
00824 struct const_value_func_2_t
00825 : public func_type_info_t<_Tret, _Ty, _Targ1, _Targ2>
00826 {
00827 public:
00828 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t) const;
00829
00830 const_value_func_2_t(func_t func, arg1_t arg1, arg2_t arg2)
00831 : m_func(func)
00832 , m_arg1(arg1)
00833 , m_arg2(arg2)
00834 {
00835 }
00836
00837 result_type operator() (const argument_type& p) const
00838 {
00839 return (p.*m_func)(m_arg1, m_arg2);
00840 }
00841
00842 protected:
00843 func_t m_func;
00844 var1_t m_arg1;
00845 var2_t m_arg2;
00846 };
00847
00850 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2>
00851 struct const_value_func_2_t<_Tret, _Ty*, _Targ1, _Targ2>
00852 : public func_type_info_t<_Tret, _Ty*, _Targ1, _Targ2>
00853 {
00854 public:
00855 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t) const;
00856
00857 const_value_func_2_t(func_t func, arg1_t arg1, arg2_t arg2)
00858 : m_func(func)
00859 , m_arg1(arg1)
00860 , m_arg2(arg2)
00861 {
00862 }
00863
00864 result_type operator() (const argument_type p) const
00865 {
00866 return (p->*m_func)(m_arg1, m_arg2);
00867 }
00868
00869 protected:
00870 func_t m_func;
00871 var1_t m_arg1;
00872 var2_t m_arg2;
00873 };
00874
00877 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3>
00878 struct value_func_3_t
00879 : public func_type_info_t<_Tret, _Ty, _Targ1, _Targ2, _Targ3>
00880 {
00881 public:
00882 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t);
00883
00884 value_func_3_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3)
00885 : m_func(func)
00886 , m_arg1(arg1)
00887 , m_arg2(arg2)
00888 , m_arg3(arg3)
00889 {
00890 }
00891
00892 result_type operator() (argument_type& p)
00893 {
00894 return (p.*m_func)(m_arg1, m_arg2, m_arg3);
00895 }
00896
00897 protected:
00898 func_t m_func;
00899 var1_t m_arg1;
00900 var2_t m_arg2;
00901 var3_t m_arg3;
00902 };
00903
00906 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3>
00907 struct value_func_3_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3>
00908 : public func_type_info_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3>
00909 {
00910 public:
00911 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t);
00912
00913 value_func_3_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3)
00914 : m_func(func)
00915 , m_arg1(arg1)
00916 , m_arg2(arg2)
00917 , m_arg3(arg3)
00918 {
00919 }
00920
00921 result_type operator() (argument_type p)
00922 {
00923 return (p->*m_func)(m_arg1, m_arg2, m_arg3);
00924 }
00925
00926 protected:
00927 func_t m_func;
00928 var1_t m_arg1;
00929 var2_t m_arg2;
00930 var3_t m_arg3;
00931 };
00932
00935 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3>
00936 struct const_value_func_3_t
00937 : public func_type_info_t<_Tret, _Ty, _Targ1, _Targ2, _Targ3>
00938 {
00939 public:
00940 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t) const;
00941
00942 const_value_func_3_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3)
00943 : m_func(func)
00944 , m_arg1(arg1)
00945 , m_arg2(arg2)
00946 , m_arg3(arg3)
00947 {
00948 }
00949
00950 result_type operator() (const argument_type& p) const
00951 {
00952 return (p.*m_func)(m_arg1, m_arg2, m_arg3);
00953 }
00954
00955 protected:
00956 func_t m_func;
00957 var1_t m_arg1;
00958 var2_t m_arg2;
00959 var3_t m_arg3;
00960 };
00961
00964 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3>
00965 struct const_value_func_3_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3>
00966 : public func_type_info_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3>
00967 {
00968 public:
00969 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t) const;
00970
00971 const_value_func_3_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3)
00972 : m_func(func)
00973 , m_arg1(arg1)
00974 , m_arg2(arg2)
00975 , m_arg3(arg3)
00976 {
00977 }
00978
00979 result_type operator() (const argument_type p) const
00980 {
00981 return (p->*m_func)(m_arg1, m_arg2, m_arg3);
00982 }
00983
00984 protected:
00985 func_t m_func;
00986 var1_t m_arg1;
00987 var2_t m_arg2;
00988 var3_t m_arg3;
00989 };
00990
00993 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4>
00994 struct value_func_4_t
00995 : public func_type_info_t<_Tret, _Ty, _Targ1, _Targ2, _Targ3, _Targ4>
00996 {
00997 public:
00998 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t, arg4_t);
00999
01000 value_func_4_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3, arg4_t arg4)
01001 : m_func(func)
01002 , m_arg1(arg1)
01003 , m_arg2(arg2)
01004 , m_arg3(arg3)
01005 , m_arg4(arg4)
01006 {
01007 }
01008
01009 result_type operator() (argument_type& p)
01010 {
01011 return (p.*m_func)(m_arg1, m_arg2, m_arg3, m_arg4);
01012 }
01013
01014 protected:
01015 func_t m_func;
01016 var1_t m_arg1;
01017 var2_t m_arg2;
01018 var3_t m_arg3;
01019 var4_t m_arg4;
01020 };
01021
01024 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4>
01025 struct value_func_4_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3, _Targ4>
01026 : public func_type_info_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3, _Targ4>
01027 {
01028 public:
01029 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t, arg4_t);
01030
01031 value_func_4_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3, arg4_t arg4)
01032 : m_func(func)
01033 , m_arg1(arg1)
01034 , m_arg2(arg2)
01035 , m_arg3(arg3)
01036 , m_arg4(arg4)
01037 {
01038 }
01039
01040 result_type operator() (argument_type p)
01041 {
01042 return (p->*m_func)(m_arg1, m_arg2, m_arg3, m_arg4);
01043 }
01044
01045 protected:
01046 func_t m_func;
01047 var1_t m_arg1;
01048 var2_t m_arg2;
01049 var3_t m_arg3;
01050 var4_t m_arg4;
01051 };
01052
01055 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4>
01056 struct const_value_func_4_t
01057 : public func_type_info_t<_Tret, _Ty, _Targ1, _Targ2, _Targ3, _Targ4>
01058 {
01059 public:
01060 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t, arg4_t) const;
01061
01062 const_value_func_4_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3, arg4_t arg4)
01063 : m_func(func)
01064 , m_arg1(arg1)
01065 , m_arg2(arg2)
01066 , m_arg3(arg3)
01067 , m_arg4(arg4)
01068 {
01069 }
01070
01071 result_type operator() (const argument_type& p) const
01072 {
01073 return (p.*m_func)(m_arg1, m_arg2, m_arg3, m_arg4);
01074 }
01075
01076 protected:
01077 func_t m_func;
01078 var1_t m_arg1;
01079 var2_t m_arg2;
01080 var3_t m_arg3;
01081 var4_t m_arg4;
01082 };
01083
01086 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4>
01087 struct const_value_func_4_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3, _Targ4>
01088 : public func_type_info_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3, _Targ4>
01089 {
01090 public:
01091 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t, arg4_t) const;
01092
01093 const_value_func_4_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3, arg4_t arg4)
01094 : m_func(func)
01095 , m_arg1(arg1)
01096 , m_arg2(arg2)
01097 , m_arg3(arg3)
01098 , m_arg4(arg4)
01099 {
01100 }
01101
01102 result_type operator() (const argument_type p) const
01103 {
01104 return (p->*m_func)(m_arg1, m_arg2, m_arg3, m_arg4);
01105 }
01106
01107 protected:
01108 func_t m_func;
01109 var1_t m_arg1;
01110 var2_t m_arg2;
01111 var3_t m_arg3;
01112 var4_t m_arg4;
01113 };
01114
01117 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4, typename _Targ5>
01118 struct value_func_5_t
01119 : public func_type_info_t<_Tret, _Ty, _Targ1, _Targ2, _Targ3, _Targ4, _Targ5>
01120 {
01121 public:
01122 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t, arg4_t, arg5_t);
01123
01124 value_func_5_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3, arg4_t arg4, arg5_t)
01125 : m_func(func)
01126 , m_arg1(arg1)
01127 , m_arg2(arg2)
01128 , m_arg3(arg3)
01129 , m_arg4(arg4)
01130 , m_arg5(arg5)
01131 {
01132 }
01133
01134 result_type operator() (argument_type& p)
01135 {
01136 return (p.*m_func)(m_arg1, m_arg2, m_arg3, m_arg4, m_arg5);
01137 }
01138
01139 protected:
01140 func_t m_func;
01141 var1_t m_arg1;
01142 var2_t m_arg2;
01143 var3_t m_arg3;
01144 var4_t m_arg4;
01145 var5_t m_arg5;
01146 };
01147
01150 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4, typename _Targ5>
01151 struct value_func_5_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3, _Targ4, _Targ5>
01152 : public func_type_info_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3, _Targ4, _Targ5>
01153 {
01154 public:
01155 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t, arg4_t, arg5_t);
01156
01157 value_func_5_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3, arg4_t arg4, arg5_t arg5)
01158 : m_func(func)
01159 , m_arg1(arg1)
01160 , m_arg2(arg2)
01161 , m_arg3(arg3)
01162 , m_arg4(arg4)
01163 , m_arg5(arg5)
01164 {
01165 }
01166
01167 result_type operator() (argument_type p)
01168 {
01169 return (p->*m_func)(m_arg1, m_arg2, m_arg3, m_arg4, m_arg5);
01170 }
01171
01172 protected:
01173 func_t m_func;
01174 var1_t m_arg1;
01175 var2_t m_arg2;
01176 var3_t m_arg3;
01177 var4_t m_arg4;
01178 var5_t m_arg5;
01179 };
01180
01183 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4, typename _Targ5>
01184 struct const_value_func_5_t
01185 : public func_type_info_t<_Tret, _Ty, _Targ1, _Targ2, _Targ3, _Targ4, _Targ5>
01186 {
01187 public:
01188 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t, arg4_t, arg5_t) const;
01189
01190 const_value_func_5_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3, arg4_t arg4, arg5_t arg5)
01191 : m_func(func)
01192 , m_arg1(arg1)
01193 , m_arg2(arg2)
01194 , m_arg3(arg3)
01195 , m_arg4(arg4)
01196 , m_arg5(arg5)
01197 {
01198 }
01199
01200 result_type operator() (const argument_type& p) const
01201 {
01202 return (p.*m_func)(m_arg1, m_arg2, m_arg3, m_arg4, m_arg5);
01203 }
01204
01205 protected:
01206 func_t m_func;
01207 var1_t m_arg1;
01208 var2_t m_arg2;
01209 var3_t m_arg3;
01210 var4_t m_arg4;
01211 var5_t m_arg5;
01212 };
01213
01216 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4, typename _Targ5>
01217 struct const_value_func_5_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3, _Targ4, _Targ5>
01218 : public func_type_info_t<_Tret, _Ty*, _Targ1, _Targ2, _Targ3, _Targ4, _Targ5>
01219 {
01220 public:
01221 typedef result_type (_Ty::*func_t)(arg1_t, arg2_t, arg3_t, arg4_t, arg5_t) const;
01222
01223 const_value_func_5_t(func_t func, arg1_t arg1, arg2_t arg2, arg3_t arg3, arg4_t arg4, arg5_t arg5)
01224 : m_func(func)
01225 , m_arg1(arg1)
01226 , m_arg2(arg2)
01227 , m_arg3(arg3)
01228 , m_arg4(arg4)
01229 , m_arg5(arg5)
01230 {
01231 }
01232
01233 result_type operator() (const argument_type p) const
01234 {
01235 return (p->*m_func)(m_arg1, m_arg2, m_arg3, m_arg4, m_arg5);
01236 }
01237
01238 protected:
01239 func_t m_func;
01240 var1_t m_arg1;
01241 var2_t m_arg2;
01242 var3_t m_arg3;
01243 var4_t m_arg4;
01244 var5_t m_arg5;
01245 };
01246
01247
01248
01251 template<typename _Tret, typename _Tkey, typename _Tval>
01252 inline map_value_func_t<_Tret, _Tkey, _Tval> map_value_func(typename map_value_func_t<_Tret, _Tkey, _Tval>::func_t func)
01253 {
01254 return map_value_func_t<_Tret, _Tkey, _Tval>(func);
01255 }
01256
01259 template<typename _Tret, typename _Tkey, typename _Tval>
01260 inline const_map_value_func_t<_Tret, _Tkey, _Tval> map_value_func(typename const_map_value_func_t<_Tret, _Tkey, _Tval>::func_t func)
01261 {
01262 return const_map_value_func_t<_Tret, _Tkey, _Tval>(func);
01263 }
01264
01267 template<typename _Tret, typename _Ty>
01268 inline value_func_t<_Tret, _Ty> value_func(_Tret (_Ty::*func)())
01269 {
01270 return value_func_t<_Ty, _Tret>(func);
01271 }
01272
01275 template<typename _Tret, typename _Ty>
01276 inline const_value_func_t<_Tret, _Ty> value_func(_Tret (_Ty::*func)() const)
01277 {
01278 return const_value_func_t<_Ty, _Tret>(func);
01279 }
01280
01283 template<typename _Tret, typename _Ty, typename _Targ1>
01284 inline value_func_1_t<_Tret, _Ty, _Targ1> value_func(_Tret (_Ty::*func)(_Targ1))
01285 {
01286 return value_func_1_t<_Ty, _Tret, _Targ1>(func);
01287 }
01288
01291 template<typename _Tret, typename _Ty, typename _Targ1>
01292 inline const_value_func_1_t<_Tret, _Ty, _Targ1> value_func(_Tret (_Ty::*func)(_Targ1) const)
01293 {
01294 return const_value_func_1_t<_Ty, _Tret, _Targ1>(func);
01295 }
01296
01299 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2>
01300 inline value_func_2_t<_Tret, _Ty, _Targ1, _Targ2> value_func(_Tret (_Ty::*func)(_Targ1, _Targ2))
01301 {
01302 return value_func_2_t<_Ty, _Tret, _Targ1, _Targ2>(func);
01303 }
01304
01307 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2>
01308 inline const_value_func_2_t<_Tret, _Ty, _Targ1, _Targ2> value_func(_Tret (_Ty::*func)(_Targ1, _Targ2) const)
01309 {
01310 return const_value_func_2_t<_Ty, _Tret, _Targ1, _Targ2>(func);
01311 }
01312
01315 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3>
01316 inline value_func_3_t<_Tret, _Ty, _Targ1, _Targ2, _Targ3> value_func(_Tret (_Ty::*func)(_Targ1, _Targ2, _Targ3))
01317 {
01318 return value_func_3_t<_Ty, _Tret, _Targ1, _Targ2, _Targ3>(func);
01319 }
01320
01323 template<typename _Tret, typename _Ty, typename _Targ1, typename _Targ2, typename _Targ3>
01324 inline const_value_func_3_t<_Tret, _Ty, _Targ1, _Targ2, _Targ3> value_func(_Tret (_Ty::*func)(_Targ1, _Targ2, _Targ3) const)
01325 {
01326 return const_value_func_3_t<_Ty, _Tret, _Targ1, _Targ2, _Targ3>(func);
01327 }
01328
01329
01332 template<typename _Tcontainer, typename _Tfunc>
01333 _Tfunc for_all(_Tcontainer& cont, _Tfunc func)
01334 {
01335 return std::for_each(cont.begin(), cont.end(), func);
01336 }
01337
01340 template<typename _Tcontainer, typename _Tfunc>
01341 bool all_of(_Tcontainer& cont, _Tfunc func)
01342 {
01343 return for_all(cont, all_of_t<_Tfunc, _Tcontainer::value_type>(func));
01344 }
01345
01348 template<typename _Tcontainer, typename _Tfunc>
01349 bool any_of(_Tcontainer& cont, _Tfunc func)
01350 {
01351 return for_all(cont, any_of_t<_Tcontainer::value_type, _Tfunc>(func));
01352 }
01353
01354
01355
01358 template<typename _Tret, typename _Tmap, typename _Tval>
01359 void for_all_map_val(_Tmap& cont, _Tret (_Tval::*func)())
01360 {
01361 for_all(cont, map_value_func_t<_Tret, _Tmap::key_type, _Tmap::mapped_type>(func));
01362 }
01363
01366 template<typename _Tret, typename _Tmap, typename _Tval>
01367 void for_all_map_val(const _Tmap& cont, _Tret (_Tval::*func)() const)
01368 {
01369 for_all(cont, const_map_value_func_t<_Tret, _Tmap::key_type, _Tmap::mapped_type>(func));
01370 }
01371
01374 template<typename _Tmap, typename _Tfunc>
01375 _Tfunc for_all_map_first(_Tmap& cont, _Tfunc func)
01376 {
01377 for_all(cont, pair_first_func_t<_Tmap::value_type, void, _Tfunc>(func));
01378 return func;
01379 }
01380
01383 template<typename _Tmap, typename _Tfunc>
01384 _Tfunc for_all_map_second(_Tmap& cont, _Tfunc func)
01385 {
01386 for_all(cont, pair_second_func_t<_Tmap::value_type, void, _Tfunc>(func));
01387 return func;
01388 }
01389
01392 template<typename _Tmap, typename _Tfunc>
01393 bool all_of_map_second(_Tmap& cont, _Tfunc func)
01394 {
01395 return for_all(cont, all_of_func(pair_second_func<_Tmap::value_type, bool>(func)));
01396 }
01397
01400 template<typename _Tmap, typename _Tfunc>
01401 bool any_of_map_second(_Tmap& cont, _Tfunc func)
01402 {
01403 return for_all(cont, any_of_func(pair_second_func<_Tmap::value_type, bool>(func)));
01404 }
01405
01406
01407
01410 template<typename _Tret, typename _Tcontainer, typename _Tval>
01411 void for_all_val(_Tcontainer& cont, _Tret (_Tval::*func)())
01412 {
01413 for_all(cont, value_func_t<_Tret, _Tcontainer::value_type>(func));
01414 }
01415
01418 template<typename _Tret, typename _Tcontainer, typename _Tval>
01419 void for_all_val(_Tcontainer& cont, _Tret (_Tval::*func)() const)
01420 {
01421 for_all(cont, const_value_func_t<_Tret, _Tcontainer::value_type>(func));
01422 }
01423
01424
01425
01428 template<typename _Targ1, typename _Tret, typename _Tcontainer, typename _Tval>
01429 void for_all_val(
01430 _Tcontainer& cont,
01431 _Tret (_Tval::*func)(_Targ1),
01432 typename arg_info<_Targ1>::argument_t arg1
01433 )
01434 {
01435 for_all(cont, value_func_1_t<_Tret, _Tcontainer::value_type, _Targ1>(func, arg1));
01436 }
01437
01440 template<typename _Targ1, typename _Tret, typename _Tcontainer, typename _Tval>
01441 void for_all_val(
01442 _Tcontainer& cont,
01443 _Tret (_Tval::*func)(_Targ1) const,
01444 typename arg_info<_Targ1>::argument_t arg1
01445 )
01446 {
01447 for_all(cont, const_value_func_1_t<_Tret, _Tcontainer::value_type, _Targ1>(func, arg1));
01448 }
01449
01450
01451
01454 template<typename _Targ1, typename _Targ2, typename _Tret, typename _Tcontainer, typename _Tval>
01455 void for_all_val(
01456 _Tcontainer& cont,
01457 _Tret (_Tval::*func)(_Targ1, _Targ2),
01458 typename arg_info<_Targ1>::argument_t arg1,
01459 typename arg_info<_Targ2>::argument_t arg2
01460 )
01461 {
01462 for_all(cont, value_func_2_t<_Tret, _Tcontainer::value_type, _Targ1, _Targ2>(func, arg1, arg2));
01463 }
01464
01467 template<typename _Targ1, typename _Targ2, typename _Tret, typename _Tcontainer, typename _Tval>
01468 void for_all_val(
01469 _Tcontainer& cont,
01470 _Tret (_Tval::*func)(_Targ1, _Targ2) const,
01471 typename arg_info<_Targ1>::argument_t arg1,
01472 typename arg_info<_Targ2>::argument_t arg2
01473 )
01474 {
01475 for_all(cont, const_value_func_2_t<_Tret, _Tcontainer::value_type, _Targ1, _Targ2>(func, arg1, arg2));
01476 }
01477
01478
01479
01482 template<typename _Targ1, typename _Targ2, typename _Targ3, typename _Tret, typename _Tcontainer, typename _Tval>
01483 void for_all_val(
01484 _Tcontainer& cont,
01485 _Tret (_Tval::*func)(_Targ1, _Targ2, _Targ3),
01486 typename arg_info<_Targ1>::argument_t arg1,
01487 typename arg_info<_Targ2>::argument_t arg2,
01488 typename arg_info<_Targ3>::argument_t arg3
01489 )
01490 {
01491 for_all(cont, value_func_3_t<_Tret, _Tcontainer::value_type, _Targ1, _Targ2, _Targ3>(func, arg1, arg2, arg3));
01492 }
01493
01496 template<typename _Targ1, typename _Targ2, typename _Targ3, typename _Tret, typename _Tcontainer, typename _Tval>
01497 void for_all_val(
01498 _Tcontainer& cont,
01499 _Tret (_Tval::*func)(_Targ1, _Targ2, _Targ3) const,
01500 typename arg_info<_Targ1>::argument_t arg1,
01501 typename arg_info<_Targ2>::argument_t arg2,
01502 typename arg_info<_Targ3>::argument_t arg3
01503 )
01504 {
01505 for_all(cont, const_value_func_3_t<_Tret, _Tcontainer::value_type, _Targ1, _Targ2, _Targ3>(func, arg1, arg2, arg3));
01506 }
01507
01508
01509
01512 template<typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4, typename _Tret, typename _Tcontainer, typename _Tval>
01513 void for_all_val(
01514 _Tcontainer& cont,
01515 _Tret (_Tval::*func)(_Targ1, _Targ2, _Targ3, _Targ4),
01516 typename arg_info<_Targ1>::argument_t arg1,
01517 typename arg_info<_Targ2>::argument_t arg2,
01518 typename arg_info<_Targ3>::argument_t arg3,
01519 typename arg_info<_Targ4>::argument_t arg4
01520 )
01521 {
01522 for_all(cont, value_func_4_t<_Tret, _Tcontainer::value_type, _Targ1, _Targ2, _Targ3, _Targ4>(func, arg1, arg2, arg3, arg4));
01523 }
01524
01527 template<typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4, typename _Tret, typename _Tcontainer, typename _Tval>
01528 void for_all_val(
01529 _Tcontainer& cont,
01530 _Tret (_Tval::*func)(_Targ1, _Targ2, _Targ3, _Targ4) const,
01531 typename arg_info<_Targ1>::argument_t arg1,
01532 typename arg_info<_Targ2>::argument_t arg2,
01533 typename arg_info<_Targ3>::argument_t arg3,
01534 typename arg_info<_Targ4>::argument_t arg4
01535 )
01536 {
01537 for_all(cont, const_value_func_4_t<_Tret, _Tcontainer::value_type, _Targ1, _Targ2, _Targ3, _Targ4>(func, arg1, arg2, arg3, arg4));
01538 }
01539
01540
01541
01544 template<typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4, typename _Targ5, typename _Tret, typename _Tcontainer, typename _Tval>
01545 void for_all_val(
01546 _Tcontainer& cont,
01547 _Tret (_Tval::*func)(_Targ1, _Targ2, _Targ3, _Targ4, _Targ5),
01548 typename arg_info<_Targ1>::argument_t arg1,
01549 typename arg_info<_Targ2>::argument_t arg2,
01550 typename arg_info<_Targ3>::argument_t arg3,
01551 typename arg_info<_Targ4>::argument_t arg4,
01552 typename arg_info<_Targ5>::argument_t arg5
01553 )
01554 {
01555 for_all(cont, value_func_5_t<_Tret, _Tcontainer::value_type, _Targ1, _Targ2, _Targ3, _Targ4, _Targ5>(func, arg1, arg2, arg3, arg4, arg5));
01556 }
01557
01560 template<typename _Targ1, typename _Targ2, typename _Targ3, typename _Targ4, typename _Targ5, typename _Tret, typename _Tcontainer, typename _Tval>
01561 void for_all_val(
01562 _Tcontainer& cont,
01563 _Tret (_Tval::*func)(_Targ1, _Targ2, _Targ3, _Targ4, _Targ5) const,
01564 typename arg_info<_Targ1>::argument_t arg1,
01565 typename arg_info<_Targ2>::argument_t arg2,
01566 typename arg_info<_Targ3>::argument_t arg3,
01567 typename arg_info<_Targ4>::argument_t arg4,
01568 typename arg_info<_Targ5>::argument_t arg5
01569 )
01570 {
01571 for_all(cont, const_value_func_5_t<_Tret, _Tcontainer::value_type, _Targ1, _Targ2, _Targ3, _Targ4, _Targ5>(func, arg1, arg2, arg3, arg4, arg5));
01572 }
01573
01574 };
01575
01576 #endif // _FOR_ALL_H_