FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
meta_element.hpp
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#pragma once
7
9
10namespace FEAT
11{
12 namespace LAFEM
13 {
22 template<
23 int i_,
24 typename First_,
25 typename... Rest_>
27 {
28 static_assert(i_ > 0, "invalid index");
29
30 typedef typename TupleElement<i_-1, Rest_...>::Type Type;
31
32 template<typename Meta_>
33 static Type& get(Meta_& meta)
34 {
35 return TupleElement<i_-1, Rest_...>::get(meta.rest());
36 }
37
38 template<typename Meta_>
39 static const Type& get(const Meta_& meta)
40 {
41 return TupleElement<i_-1, Rest_...>::get(meta.rest());
42 }
43 };
44
46 template<typename First_, typename... Rest_>
47 struct TupleElement<0, First_, Rest_...>
48 {
49 typedef First_ Type;
50
51 template<typename Meta_>
52 static Type& get(Meta_& meta)
53 {
54 return meta.first();
55 }
56
57 template<typename Meta_>
58 static const Type& get(const Meta_& meta)
59 {
60 return meta.first();
61 }
62 };
64
73 template<int i_, typename SubType_>
75 {
76 static_assert(i_ > 0, "invalid index");
77
78 template<typename Meta_>
79 static SubType_& get(Meta_& meta)
80 {
81 return PowerElement<i_-1, SubType_>::get(meta.rest());
82 }
83
84 template<typename Meta_>
85 static const SubType_& get(const Meta_& meta)
86 {
87 return PowerElement<i_-1, SubType_>::get(meta.rest());
88 }
89 };
90
92 template<typename SubType_>
93 struct PowerElement<0, SubType_>
94 {
95 template<typename Meta_>
96 static SubType_& get(Meta_& meta)
97 {
98 return meta.first();
99 }
100
101 template<typename Meta_>
102 static const SubType_& get(const Meta_& meta)
103 {
104 return meta.first();
105 }
106 };
108 } // namespace LAFEM
109} // namespace FEAT
FEAT Kernel base header.
FEAT namespace.
Definition: adjactor.hpp:12
Power container element helper class template.
Tuple container element helper class template.