Sacado Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Sacado_mpl_quote.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Sacado Package
4 //
5 // Copyright 2006 NTESS and the Sacado contributors.
6 // SPDX-License-Identifier: LGPL-2.1-or-later
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef SACADO_MPL_QUOTE_HPP
11 #define SACADO_MPL_QUOTE_HPP
12 
13 #include "Sacado_mpl_type_wrap.hpp"
14 
15 namespace Sacado {
16 
17  namespace mpl {
18 
19  // Transform a class/template to a metafunction class
20  // (nested template apply)
21  template <class F>
22  struct quote0 {
23  struct apply : mpl::type_wrap< F > {};
24  };
25 
26  template <template<class T1> class F>
27  struct quote1 {
28  template <class T1>
29  struct apply : mpl::type_wrap< F<T1> > {};
30  };
31 
32  template < template<class T1,
33  class T2> class F>
34  struct quote2 {
35  template <class T1,
36  class T2>
37  struct apply : mpl::type_wrap< F<T1,T2> >{};
38  };
39 
40  template < template<class T1,
41  class T2,
42  class T3> class F>
43  struct quote3 {
44  template <class T1,
45  class T2,
46  class T3>
47  struct apply : mpl::type_wrap< F<T1,T2,T3> >{};
48  };
49 
50  template < template<class T1,
51  class T2,
52  class T3,
53  class T4> class F>
54  struct quote4 {
55  template <class T1,
56  class T2,
57  class T3,
58  class T4>
59  struct apply : mpl::type_wrap< F<T1,T2,T3,T4> >{};
60  };
61 
62  template < template<class T1,
63  class T2,
64  class T3,
65  class T4,
66  class T5> class F>
67  struct quote5 {
68  template <class T1,
69  class T2,
70  class T3,
71  class T4,
72  class T5>
73  struct apply : mpl::type_wrap< F<T1,T2,T3,T4,T5> >{};
74  };
75 
76  template <class F>
77  struct quote : quote0<F> {};
78 
79  template < template<class T1> class F,
80  class T1>
81  struct quote< F<T1> > : quote1<F> {};
82 
83  template < template<class T1,
84  class T2> class F,
85  class T1,
86  class T2>
87  struct quote< F<T1,T2> > : quote2<F> {};
88 
89  template < template<class T1,
90  class T2,
91  class T3> class F,
92  class T1,
93  class T2,
94  class T3>
95  struct quote< F<T1,T2,T3> > : quote3<F> {};
96 
97  template < template<class T1,
98  class T2,
99  class T3,
100  class T4> class F,
101  class T1,
102  class T2,
103  class T3,
104  class T4>
105  struct quote< F<T1,T2,T3,T4> > : quote4<F> {};
106 
107  template < template<class T1,
108  class T2,
109  class T3,
110  class T4,
111  class T5> class F,
112  class T1,
113  class T2,
114  class T3,
115  class T4,
116  class T5>
117  struct quote< F<T1,T2,T3,T4,T5> > : quote5<F> {};
118 
119  } // namespace mpl
120 
121 } // namespace Sacado
122 
123 #endif // SACADO_MPL_QUOTE_HPP
Sacado::Fad::DFad< double > F
Definition: ad_example.cpp:20
#define T2(r, f)
Definition: Sacado_rad.hpp:558
#define T1(r, f)
Definition: Sacado_rad.hpp:583