DGtal  0.9.2
SimpleMatrixSpecializations.h
1 
17 #pragma once
18 
31 #if defined(SimpleMatrixSpecializations_RECURSES)
32 #error Recursive header files inclusion detected in SimpleMatrixSpecializations.h
33 #else // defined(SimpleMatrixSpecializations_RECURSES)
34 
35 #define SimpleMatrixSpecializations_RECURSES
36 
37 #if !defined SimpleMatrixSpecializations_h
38 
39 #define SimpleMatrixSpecializations_h
40 
42 // Inclusions
43 #include <iostream>
44 #include "DGtal/base/Common.h"
45 #include "DGtal/math/linalg/SimpleMatrix.h"
46 #include "DGtal/kernel/NumberTraits.h"
48 
49 namespace DGtal
50 {
51 
52 
54  // template class SimpleMatrixSpecializations
67  template <typename TMatrix, DGtal::Dimension TM, DGtal::Dimension TN>
69  {
70  // ----------------------- Standard services ------------------------------
71 
73  typedef typename TMatrix::Component Component;
75  typedef TMatrix Matrix;
76 
77  BOOST_STATIC_ASSERT( TM == TMatrix::M );
78  BOOST_STATIC_ASSERT( TN == TMatrix::N );
79 
89  static Component minorDeterminant(const Matrix &M,
90  const DGtal::Dimension i,
91  const DGtal::Dimension j);
92 
100  static Component determinant(const Matrix &M);
101 
102 
103  }; // end of class SimpleMatrixSpecializations
104 
106  // template class SimpleMatrixSpecializations
111  template <typename TMatrix>
112  struct SimpleMatrixSpecializations<TMatrix,2,2>
113  {
114  // ----------------------- Standard services ------------------------------
115  public:
116 
117  typedef typename TMatrix::Component Component;
118  typedef TMatrix Matrix;
119 
120  BOOST_STATIC_ASSERT( 2 == TMatrix::M );
121  BOOST_STATIC_ASSERT( 2 == TMatrix::N );
122 
132  static Component minorDeterminant(const Matrix &aM,
133  const DGtal::Dimension i,
134  const DGtal::Dimension j);
135 
143  static Component determinant(const Matrix &aM);
144 
145 
146  }; // end of class SimpleMatrixSpecializations
148  // template class SimpleMatrixSpecializations
153  template <typename TMatrix>
154  struct SimpleMatrixSpecializations<TMatrix,1,1>
155  {
156  // ----------------------- Standard services ------------------------------
157  public:
158 
159  typedef typename TMatrix::Component Component;
160  typedef TMatrix Matrix;
161 
162  BOOST_STATIC_ASSERT( 1 == TMatrix::M );
163  BOOST_STATIC_ASSERT( 1 == TMatrix::N );
164 
174  static Component minorDeterminant(const Matrix &aM,
175  const DGtal::Dimension i,
176  const DGtal::Dimension j);
177 
185  static Component determinant(const Matrix &aM);
186 
187 
188  }; // end of class SimpleMatrixSpecializations
189 
191  // template class SimpleMatrixSpecializations
196  template <typename TMatrix>
197  struct SimpleMatrixSpecializations<TMatrix,3,3>
198  {
199  // ----------------------- Standard services ------------------------------
200  public:
201 
202  typedef typename TMatrix::Component Component;
203  typedef TMatrix Matrix;
204 
205  BOOST_STATIC_ASSERT( 3 == TMatrix::M );
206  BOOST_STATIC_ASSERT( 3 == TMatrix::N );
207 
217  static Component minorDeterminant(const Matrix &M,
218  const DGtal::Dimension i,
219  const DGtal::Dimension j);
220 
228  static Component determinant(const Matrix &M);
229 
230 
231  }; // end of class SimpleMatrixSpecializations
232 
233 } // namespace DGtal
234 
235 
237 // Includes inline functions.
238 #include "DGtal/math/linalg/SimpleMatrixSpecializations.ih"
239 
240 // //
242 
243 #endif // !defined SimpleMatrixSpecializations_h
244 
245 #undef SimpleMatrixSpecializations_RECURSES
246 #endif // else defined(SimpleMatrixSpecializations_RECURSES)
DGtal::uint32_t Dimension
Definition: Common.h:113
TMatrix::Component Component
Matrix componenets type.
static Component minorDeterminant(const Matrix &M, const DGtal::Dimension i, const DGtal::Dimension j)
DGtal is the top-level namespace which contains all DGtal functions and types.
Aim: Implement internal matrix services for specialized matrix size.
static Component determinant(const Matrix &M)