doxygen: add newline after \file
[blender.git] / intern / itasc / kdl / utilities / traits.h
1 /** \file itasc/kdl/utilities/traits.h
2  * \ingroup itasc
3  */
4 #ifndef KDLPV_TRAITS_H 
5 #define KDLPV_TRAITS_H 
6
7 #include "utility.h"
8
9  
10 // forwards declarations :
11 namespace KDL {
12    class Frame;
13     class Rotation;
14     class Vector;
15     class Twist;
16     class Wrench;
17         class FrameVel;
18         class RotationVel;
19         class VectorVel;
20         class TwistVel;
21 }
22
23
24 /**
25  * @brief Traits are traits classes to determine the type of a derivative of another type.
26  *
27  * For geometric objects the "geometric" derivative is chosen.  For example the derivative of a Rotation
28  * matrix is NOT a 3x3 matrix containing the derivative of the elements of a rotation matrix.  The derivative
29  * of the rotation matrix is a Vector corresponding the rotational velocity.  Mostly used in template classes
30  * and routines to derive a correct type when needed.
31  * 
32  * You can see this as a compile-time lookuptable to find the type of the derivative.
33  *
34  * Example
35  * \verbatim
36         Rotation R;
37     Traits<Rotation> dR;
38    \endverbatim
39  */
40 template <typename T>
41 struct Traits {
42         typedef T valueType;
43         typedef T derivType;
44 };
45
46 template <>
47 struct Traits<KDL::Frame> {
48         typedef KDL::Frame valueType;
49         typedef KDL::Twist derivType;
50 };
51 template <>
52 struct Traits<KDL::Twist> {
53         typedef KDL::Twist valueType;
54         typedef KDL::Twist derivType;
55 };
56 template <>
57 struct Traits<KDL::Wrench> {
58         typedef KDL::Wrench valueType;
59         typedef KDL::Wrench derivType;
60 };
61
62 template <>
63 struct Traits<KDL::Rotation> {
64         typedef KDL::Rotation valueType;
65         typedef KDL::Vector derivType;
66 };
67
68 template <>
69 struct Traits<KDL::Vector> {
70         typedef KDL::Vector valueType;
71         typedef KDL::Vector derivType;
72 };
73
74 template <>
75 struct Traits<double> {
76         typedef double valueType;
77         typedef double derivType;
78 };
79
80 template <>
81 struct Traits<float> {
82         typedef float valueType;
83         typedef float derivType;
84 };
85
86 template <>
87 struct Traits<KDL::FrameVel> {
88         typedef KDL::Frame valueType;
89         typedef KDL::TwistVel derivType;
90 };
91 template <>
92 struct Traits<KDL::TwistVel> {
93         typedef KDL::Twist valueType;
94         typedef KDL::TwistVel derivType;
95 };
96
97 template <>
98 struct Traits<KDL::RotationVel> {
99         typedef KDL::Rotation valueType;
100         typedef KDL::VectorVel derivType;
101 };
102
103 template <>
104 struct Traits<KDL::VectorVel> {
105         typedef KDL::Vector valueType;
106         typedef KDL::VectorVel derivType;
107 };
108
109
110
111 #endif
112
113
114