1 // (C) Copyright 2008-10 Anthony Williams 2 // (C) Copyright 2011-2015 Vicente J. Botet Escriba 3 // 4 // Distributed under the Boost Software License, Version 1.0. (See 5 // accompanying file LICENSE_1_0.txt or copy at 6 // http://www.boost.org/LICENSE_1_0.txt) 7 8 #ifndef BOOST_THREAD_FUTURES_WAIT_FOR_ALL_HPP 9 #define BOOST_THREAD_FUTURES_WAIT_FOR_ALL_HPP 10 11 #include <boost/thread/detail/config.hpp> 12 #include <boost/thread/futures/is_future_type.hpp> 13 14 #include <boost/core/enable_if.hpp> 15 16 namespace boost 17 { 18 template<typename Iterator> wait_for_all(Iterator begin,Iterator end)19 typename boost::disable_if<is_future_type<Iterator>,void>::type wait_for_all(Iterator begin,Iterator end) 20 { 21 for(Iterator current=begin;current!=end;++current) 22 { 23 current->wait(); 24 } 25 } 26 27 #ifdef BOOST_NO_CXX11_VARIADIC_TEMPLATES 28 template<typename F1,typename F2> wait_for_all(F1 & f1,F2 & f2)29 typename boost::enable_if<is_future_type<F1>,void>::type wait_for_all(F1& f1,F2& f2) 30 { 31 f1.wait(); 32 f2.wait(); 33 } 34 35 template<typename F1,typename F2,typename F3> wait_for_all(F1 & f1,F2 & f2,F3 & f3)36 void wait_for_all(F1& f1,F2& f2,F3& f3) 37 { 38 f1.wait(); 39 f2.wait(); 40 f3.wait(); 41 } 42 43 template<typename F1,typename F2,typename F3,typename F4> wait_for_all(F1 & f1,F2 & f2,F3 & f3,F4 & f4)44 void wait_for_all(F1& f1,F2& f2,F3& f3,F4& f4) 45 { 46 f1.wait(); 47 f2.wait(); 48 f3.wait(); 49 f4.wait(); 50 } 51 52 template<typename F1,typename F2,typename F3,typename F4,typename F5> wait_for_all(F1 & f1,F2 & f2,F3 & f3,F4 & f4,F5 & f5)53 void wait_for_all(F1& f1,F2& f2,F3& f3,F4& f4,F5& f5) 54 { 55 f1.wait(); 56 f2.wait(); 57 f3.wait(); 58 f4.wait(); 59 f5.wait(); 60 } 61 #else 62 template<typename F1, typename... Fs> wait_for_all(F1 & f1,Fs &...fs)63 typename boost::enable_if<is_future_type<F1>,void>::type wait_for_all(F1& f1, Fs&... fs) 64 { 65 bool dummy[] = { (f1.wait(), true), (fs.wait(), true)... }; 66 67 // prevent unused parameter warning 68 (void) dummy; 69 } 70 #endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)} 71 72 } 73 74 #endif // header 75