DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
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/kernel/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 
88  static Component minorDeterminant(const Matrix &M,
89  const DGtal::Dimension i,
90  const DGtal::Dimension j);
91 
99  static Component determinant(const Matrix &M);
100 
101 
102  }; // end of class SimpleMatrixSpecializations
103 
105  // template class SimpleMatrixSpecializations
110  template <typename TMatrix>
111  struct SimpleMatrixSpecializations<TMatrix,2,2>
112  {
113  // ----------------------- Standard services ------------------------------
114  public:
115 
116  typedef typename TMatrix::Component Component;
117  typedef TMatrix Matrix;
118 
119  BOOST_STATIC_ASSERT( 2 == TMatrix::M );
120  BOOST_STATIC_ASSERT( 2 == TMatrix::N );
121 
130  static Component minorDeterminant(const Matrix &aM,
131  const DGtal::Dimension i,
132  const DGtal::Dimension j);
133 
141  static Component determinant(const Matrix &aM);
142 
143 
144  }; // end of class SimpleMatrixSpecializations
146  // template class SimpleMatrixSpecializations
151  template <typename TMatrix>
152  struct SimpleMatrixSpecializations<TMatrix,1,1>
153  {
154  // ----------------------- Standard services ------------------------------
155  public:
156 
157  typedef typename TMatrix::Component Component;
158  typedef TMatrix Matrix;
159 
160  BOOST_STATIC_ASSERT( 1 == TMatrix::M );
161  BOOST_STATIC_ASSERT( 1 == TMatrix::N );
162 
171  static Component minorDeterminant(const Matrix &aM,
172  const DGtal::Dimension i,
173  const DGtal::Dimension j);
174 
182  static Component determinant(const Matrix &aM);
183 
184 
185  }; // end of class SimpleMatrixSpecializations
186 
188  // template class SimpleMatrixSpecializations
193  template <typename TMatrix>
194  struct SimpleMatrixSpecializations<TMatrix,3,3>
195  {
196  // ----------------------- Standard services ------------------------------
197  public:
198 
199  typedef typename TMatrix::Component Component;
200  typedef TMatrix Matrix;
201 
202  BOOST_STATIC_ASSERT( 3 == TMatrix::M );
203  BOOST_STATIC_ASSERT( 3 == TMatrix::N );
204 
213  static Component minorDeterminant(const Matrix &M,
214  const DGtal::Dimension i,
215  const DGtal::Dimension j);
216 
224  static Component determinant(const Matrix &M);
225 
226 
227  }; // end of class SimpleMatrixSpecializations
228 
229 } // namespace DGtal
230 
231 
233 // Includes inline functions.
234 #include "DGtal/kernel/SimpleMatrixSpecializations.ih"
235 
236 // //
238 
239 #endif // !defined SimpleMatrixSpecializations_h
240 
241 #undef SimpleMatrixSpecializations_RECURSES
242 #endif // else defined(SimpleMatrixSpecializations_RECURSES)