SheafSystem  0.0.0.0
gl2.impl.h
Go to the documentation of this file.
1 
2 //
3 // Copyright (c) 2014 Limit Point Systems, Inc.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 
20 
21 #ifndef GL2_IMPL_H
22 #define GL2_IMPL_H
23 
24 #ifndef SHEAF_DLL_SPEC_H
25 #include "SheafSystem/sheaf_dll_spec.h"
26 #endif
27 
28 #ifndef GL2_H
29 #include "SheafSystem/gl2.h"
30 #endif
31 
32 namespace fiber_bundle
33 {
34 
35 //==============================================================================
36 // CLASS GL2_ROW_DOFS_TYPE
37 //==============================================================================
38 
39 template <typename T>
40 const std::string&
43 {
44  // Preconditions:
45 
46  // Body:
47 
48  static const std::string result("gl2_row_dofs_type");
49 
50  // Postconditions:
51 
52  ensure(!result.empty());
53 
54  // Exit:
55 
56  return result;
57 }
58 
59 template <typename T>
60 int
62 d()
63 {
64  // Preconditions:
65 
66  // Body:
67 
68  int result = 8;
69 
70  // Postconditions:
71 
72  ensure(result == 8);
73 
74  // Exit:
75 
76  return result;
77 }
78 
79 template <typename T>
80 T&
82 operator[] (int xindex)
83 {
84  // Preconditions:
85 
86  ensure(xindex>=0 && xindex<d());
87 
88  // Body:
89 
90  T& result = components[xindex];
91 
92  // Postconditions:
93 
94  // Exit:
95 
96  return result;
97 }
98 
99 template <typename T>
100 const T&
102 operator[] (int xindex) const
103 {
104  // Preconditions:
105 
106  ensure(xindex>=0 && xindex<d());
107 
108  // Body:
109 
110  const T& result = components[xindex];
111 
112  // Postconditions:
113 
114  // Exit:
115 
116  return result;
117 }
118 
119 template <typename T>
122 {
123  // Preconditions:
124 
125  // Body:
126 
127  matrix_type& result = basis_matrix();
128 
129  // Postconditions:
130 
131  // Exit:
132 
133  return result;
134 }
135 
136 template <typename T>
138 operator const typename gl2_row_dofs_type<T>::matrix_type& () const
139 {
140  // Preconditions:
141 
142  // Body:
143 
144  const matrix_type& result = basis_matrix();
145 
146  // Postconditions:
147 
148  // Exit:
149 
150  return result;
151 }
152 
153 template <typename T>
157 {
158  // Preconditions:
159 
160  // Body:
161 
162  T& comp0 = components[0];
163  matrix_type& result = reinterpret_cast<matrix_type&>(comp0);
164 
165  // Postconditions:
166 
167  // Exit:
168 
169  return result;
170 }
171 
172 template <typename T>
173 const typename gl2_row_dofs_type<T>::matrix_type&
176 {
177  // Preconditions:
178 
179  // Body:
180 
181  T& comp0 = const_cast<T&>(components[0]);
182  const matrix_type& result = reinterpret_cast<matrix_type&>(comp0);
183 
184  // Postconditions:
185 
186  // Exit:
187 
188  return result;
189 }
190 
191 template <typename T>
195 {
196  // Preconditions:
197 
198  // Body:
199 
200  // Component part states at element 4.
201 
202  T& comp4 = components[4];
203  matrix_type& result = reinterpret_cast<matrix_type&>(comp4);
204 
205  // Postconditions:
206 
207  // Exit:
208 
209  return result;
210 }
211 
212 template <typename T>
213 const typename gl2_row_dofs_type<T>::matrix_type&
216 {
217  // Preconditions:
218 
219  // Body:
220 
221  // Component part states at element 4.
222 
223  T& comp4 = const_cast<T&>(components[4]);
224  const matrix_type& result = reinterpret_cast<matrix_type&>(comp4);
225 
226  // Postconditions:
227 
228  // Exit:
229 
230  return result;
231 }
232 
233 template <typename T>
236 {
237  // Preconditions:
238 
239  // Body:
240 
242 
243  // Postconditions:
244 
245  ensure(result != 0);
246 
247  // Exit:
248 
249  return result;
250 }
251 
252 //==============================================================================
253 // NON-MEMBER FUNCTIONS
254 //==============================================================================
255 
256 #ifndef DOXYGEN_SKIP_IMPLEMENTATIONS
257 template <typename T>
258 std::ostream& operator<<(std::ostream& xos, const gl2_row_dofs_type<T>& xrdt)
259 {
260  int ld = xrdt.d();
261  for(int i=0; i<ld; ++i)
262  {
263  xos << " " << xrdt.components[i];
264  }
265 
266  return xos;
267 }
268 #endif // ifndef DOXYGEN_SKIP_IMPLEMENTATIONS
269 
270 } // namespace fiber_bundle
271 
272 #endif // ifndef GL2_IMPL_H
General matrix with 2 rows and 2 columns.
Row dofs type for class gl2.
Definition: gl2.h:50
matrix_type & component_matrix()
The associated component transformation matrix (non const version).
Definition: gl2.impl.h:194
static int d()
The dimension of the row dof components.
Definition: gl2.impl.h:62
matrix_type & basis_matrix()
The associated basis transformation matrix (non const version).
Definition: gl2.impl.h:156
T & operator[](int xindex)
Value of xindex-th component (row dof) (non const version).
Definition: gl2.impl.h:82
gl2_row_dofs_type< T > * clone() const
Creates a new instance of the same type as this.
Definition: gl2.impl.h:235
static const std::string & static_class_name()
The name of this class.
Definition: gl2.impl.h:42
Namespace for the fiber_bundles component of the sheaf system.