111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <parallel/numeric> Forward declarations -*- C++ -*- 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Copyright (C) 2007-2014 Free Software Foundation, Inc. 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is part of the GNU ISO C++ Library. This library is free 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// software; you can redistribute it and/or modify it under the terms 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// of the GNU General Public License as published by the Free Software 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Foundation; either version 3, or (at your option) any later 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// version. 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This library is distributed in the hope that it will be useful, but 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// WITHOUT ANY WARRANTY; without even the implied warranty of 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// General Public License for more details. 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Under Section 7 of GPL version 3, you are granted additional 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// permissions described in the GCC Runtime Library Exception, version 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 3.1, as published by the Free Software Foundation. 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// You should have received a copy of the GNU General Public License and 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// a copy of the GCC Runtime Library Exception along with this program; 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <http://www.gnu.org/licenses/>. 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/** @file parallel/numericfwd.h 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This file is a GNU parallel extension to the Standard C++ Library. 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _GLIBCXX_PARALLEL_NUMERICFWD_H 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _GLIBCXX_PARALLEL_NUMERICFWD_H 1 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#pragma GCC system_header 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <parallel/tags.h> 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <parallel/settings.h> 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace std _GLIBCXX_VISIBILITY(default) 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace __parallel 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _Tp> 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert accumulate(_IIter, _IIter, _Tp); 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _Tp> 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert accumulate(_IIter, _IIter, _Tp, __gnu_parallel::sequential_tag); 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _Tp> 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert accumulate(_IIter, _IIter, _Tp, __gnu_parallel::_Parallelism); 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _Tp, typename _Tag> 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __accumulate_switch(_IIter, _IIter, _Tp, _Tag); 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _Tp, typename _BinaryOper> 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert accumulate(_IIter, _IIter, _Tp, _BinaryOper); 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _Tp, typename _BinaryOper> 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert accumulate(_IIter, _IIter, _Tp, _BinaryOper, 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::sequential_tag); 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _Tp, typename _BinaryOper> 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert accumulate(_IIter, _IIter, _Tp, _BinaryOper, 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::_Parallelism); 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _Tp, typename _BinaryOper, 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename _Tag> 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __accumulate_switch(_IIter, _IIter, _Tp, _BinaryOper, _Tag); 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _RAIter, typename _Tp, typename _BinaryOper> 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __accumulate_switch(_RAIter, _RAIter, _Tp, _BinaryOper, 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert random_access_iterator_tag, 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::_Parallelism __parallelism 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert = __gnu_parallel::parallel_unbalanced); 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter> 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert adjacent_difference(_IIter, _IIter, _OIter); 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter, typename _BinaryOper> 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper); 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter> 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert adjacent_difference(_IIter, _IIter, _OIter, 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::sequential_tag); 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter, typename _BinaryOper> 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper, 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::sequential_tag); 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter> 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert adjacent_difference(_IIter, _IIter, _OIter, 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::_Parallelism); 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter, typename _BinaryOper> 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper, 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::_Parallelism); 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter, typename _BinaryOper, 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename _Tag1, typename _Tag2> 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper, 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tag1, _Tag2); 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter, typename _BinaryOper> 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper, 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert random_access_iterator_tag, 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert random_access_iterator_tag, 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::_Parallelism __parallelism 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert = __gnu_parallel::parallel_unbalanced); 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter1, typename _IIter2, typename _Tp> 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inner_product(_IIter1, _IIter1, _IIter2, _Tp); 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter1, typename _IIter2, typename _Tp> 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inner_product(_IIter1, _IIter1, _IIter2, _Tp, 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::sequential_tag); 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter1, typename _IIter2, typename _Tp> 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inner_product(_IIter1, _IIter1, _IIter2, _Tp, 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::_Parallelism); 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter1, typename _IIter2, typename _Tp, 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename _BinaryFunction1, typename _BinaryFunction2> 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inner_product(_IIter1, _IIter1, _IIter2, _Tp, 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _BinaryFunction1, _BinaryFunction2); 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter1, typename _IIter2, typename _Tp, 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename _BinaryFunction1, typename _BinaryFunction2> 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inner_product(_IIter1, _IIter1, _IIter2, _Tp, _BinaryFunction1, 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _BinaryFunction2, __gnu_parallel::sequential_tag); 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter1, typename _IIter2, typename _Tp, 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename BinaryFunction1, typename BinaryFunction2> 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inner_product(_IIter1, _IIter1, _IIter2, _Tp, BinaryFunction1, 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BinaryFunction2, __gnu_parallel::_Parallelism); 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _RAIter1, typename _RAIter2, typename _Tp, 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename BinaryFunction1, typename BinaryFunction2> 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __inner_product_switch(_RAIter1, _RAIter1, _RAIter2, _Tp, BinaryFunction1, 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert BinaryFunction2, random_access_iterator_tag, 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert random_access_iterator_tag, 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::_Parallelism 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert = __gnu_parallel::parallel_unbalanced); 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter1, typename _IIter2, typename _Tp, 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename _BinaryFunction1, typename _BinaryFunction2, 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename _Tag1, typename _Tag2> 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Tp 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __inner_product_switch(_IIter1, _IIter1, _IIter2, _Tp, _BinaryFunction1, 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _BinaryFunction2, _Tag1, _Tag2); 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter> 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert partial_sum(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag); 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter, typename _BinaryOper> 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert partial_sum(_IIter, _IIter, _OIter, _BinaryOper, 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __gnu_parallel::sequential_tag); 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter> 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert partial_sum(_IIter, _IIter, _OIter __result); 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter, typename _BinaryOper> 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert partial_sum(_IIter, _IIter, _OIter, _BinaryOper); 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter, typename _BinaryOper, 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename _Tag1, typename _Tag2> 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __partial_sum_switch(_IIter, _IIter, _OIter, _BinaryOper, _Tag1, _Tag2); 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _IIter, typename _OIter, typename _BinaryOper> 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _OIter 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __partial_sum_switch(_IIter, _IIter, _OIter, _BinaryOper, 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert random_access_iterator_tag, random_access_iterator_tag); 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} // end namespace 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} // end namespace 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _GLIBCXX_PARALLEL_NUMERICFWD_H */ 204