Sacado Package Browser (Single Doxygen Collection)
Version of the Day
src
mpl
Sacado_mpl_for_each.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Sacado Package
5
// Copyright (2006) Sandia Corporation
6
//
7
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8
// the U.S. Government retains certain rights in this software.
9
//
10
// This library is free software; you can redistribute it and/or modify
11
// it under the terms of the GNU Lesser General Public License as
12
// published by the Free Software Foundation; either version 2.1 of the
13
// License, or (at your option) any later version.
14
//
15
// This library is distributed in the hope that it will be useful, but
16
// WITHOUT ANY WARRANTY; without even the implied warranty of
17
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
// Lesser General Public License for more details.
19
//
20
// You should have received a copy of the GNU Lesser General Public
21
// License along with this library; if not, write to the Free Software
22
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23
// USA
24
// Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
25
// (etphipp@sandia.gov).
26
//
27
// ***********************************************************************
28
// @HEADER
29
30
#ifndef SACADO_MPL_FOR_EACH_HPP
31
#define SACADO_MPL_FOR_EACH_HPP
32
33
#include "
Sacado_ConfigDefs.h
"
34
35
#include "
Sacado_mpl_begin.hpp
"
36
#include "
Sacado_mpl_end.hpp
"
37
#include "
Sacado_mpl_next.hpp
"
38
#include "
Sacado_mpl_deref.hpp
"
39
40
namespace
Sacado
{
41
42
namespace
mpl {
43
44
template
<
class
Seq,
45
class
Iter1 =
typename
mpl::begin<Seq>::type,
46
class
Iter2 =
typename
mpl::end<Seq>::type>
47
struct
for_each
{
48
template
<
typename
Op>
49
KOKKOS_INLINE_FUNCTION
50
for_each
(
const
Op& op) {
51
op(
typename
mpl::deref<Iter1>::type
());
52
for_each<Seq, typename mpl::next<Iter1>::type
, Iter2>
f
(op);
53
}
54
};
55
56
template
<
class
Seq,
class
Iter1>
57
struct
for_each
<Seq, Iter1, Iter1> {
58
template
<
typename
Op>
59
KOKKOS_INLINE_FUNCTION
60
for_each
(
const
Op& op) {}
61
};
62
63
// Same as for_each above, but without KOKKOS_INLINE_FUNCTION for functors
64
// that aren't meant to run inside kokkos kernels.
65
template
<
class
Seq,
66
class
Iter1 =
typename
mpl::begin<Seq>::type
,
67
class
Iter2 =
typename
mpl::end<Seq>::type
>
68
struct
for_each_no_kokkos
{
69
template
<
typename
Op>
70
for_each_no_kokkos
(
const
Op& op) {
71
op(
typename
mpl::deref<Iter1>::type
());
72
for_each_no_kokkos<Seq, typename mpl::next<Iter1>::type
, Iter2>
f
(op);
73
}
74
};
75
76
template
<
class
Seq,
class
Iter1>
77
struct
for_each_no_kokkos
<Seq, Iter1, Iter1> {
78
template
<
typename
Op>
79
for_each_no_kokkos
(
const
Op& op) {}
80
};
81
82
}
83
84
}
85
86
#endif // SACADO_MPL_FOR_EACH_HPP
Sacado::mpl::for_each::for_each
KOKKOS_INLINE_FUNCTION for_each(const Op &op)
Definition:
Sacado_mpl_for_each.hpp:50
Sacado::mpl::begin
Definition:
Sacado_mpl_begin.hpp:42
KOKKOS_INLINE_FUNCTION
#define KOKKOS_INLINE_FUNCTION
Definition:
Sacado_ConfigDefs.h:90
Sacado::mpl::for_each< Seq, Iter1, Iter1 >::for_each
KOKKOS_INLINE_FUNCTION for_each(const Op &op)
Definition:
Sacado_mpl_for_each.hpp:60
Sacado_mpl_end.hpp
Sacado::mpl::for_each_no_kokkos::for_each_no_kokkos
for_each_no_kokkos(const Op &op)
Definition:
Sacado_mpl_for_each.hpp:70
Sacado::mpl::end
Definition:
Sacado_mpl_end.hpp:42
f
void f()
Sacado
Definition:
Sacado_mpl_apply.hpp:39
Sacado::mpl::for_each_no_kokkos
Definition:
Sacado_mpl_for_each.hpp:68
Sacado_mpl_next.hpp
Sacado_mpl_deref.hpp
Sacado::mpl::for_each
Definition:
Sacado_mpl_for_each.hpp:47
Sacado_mpl_begin.hpp
Sacado_ConfigDefs.h
Sacado::mpl::deref
Definition:
Sacado_mpl_deref.hpp:39
Sacado::mpl::for_each_no_kokkos< Seq, Iter1, Iter1 >::for_each_no_kokkos
for_each_no_kokkos(const Op &op)
Definition:
Sacado_mpl_for_each.hpp:79
Generated by
1.8.16