[Bf-blender-cvs] [d54e71c] temp_bge_moto: BGE: Moto: use templates to avoid duplicated code to convert in double or float arrays.

Porteries Tristan noreply at git.blender.org
Sat Oct 31 22:48:54 CET 2015


Commit: d54e71c8bf1b0ea5651f9b44282f367c5d4e0906
Author: Porteries Tristan
Date:   Sat Oct 31 10:24:38 2015 +0100
Branches: temp_bge_moto
https://developer.blender.org/rBd54e71c8bf1b0ea5651f9b44282f367c5d4e0906

BGE: Moto: use templates to avoid duplicated code to convert in double or float arrays.

===================================================================

M	intern/moto/include/MT_CmMatrix4x4.h
M	intern/moto/include/MT_Matrix3x3.h
M	intern/moto/include/MT_Matrix4x4.h
M	intern/moto/include/MT_Point2.h
M	intern/moto/include/MT_Point3.h
M	intern/moto/include/MT_Quaternion.h
M	intern/moto/include/MT_Transform.h
M	intern/moto/include/MT_Tuple2.h
M	intern/moto/include/MT_Tuple3.h
M	intern/moto/include/MT_Tuple4.h
M	intern/moto/include/MT_Vector2.h
M	intern/moto/include/MT_Vector3.h
M	intern/moto/include/MT_Vector4.h
M	intern/moto/intern/MT_CmMatrix4x4.cpp
M	intern/moto/intern/MT_Transform.cpp

===================================================================

diff --git a/intern/moto/include/MT_CmMatrix4x4.h b/intern/moto/include/MT_CmMatrix4x4.h
index 2b710c6..962451c 100644
--- a/intern/moto/include/MT_CmMatrix4x4.h
+++ b/intern/moto/include/MT_CmMatrix4x4.h
@@ -54,16 +54,17 @@ class MT_CmMatrix4x4
 
 public :
 
-	MT_CmMatrix4x4(
-		const float value[4][4]
-	);
-
-	MT_CmMatrix4x4(
-	);
-
+	template <typename T>
+	MT_CmMatrix4x4(const T value[4][4])
+	{
+		for (int i=0;i<4;i++)
+		{
+			for (int j=0;j<4;j++)
+				m_V[i][j] = (double)value[i][j];
+		}
+	}
 
 	MT_CmMatrix4x4(
-		const double value[16]
 	);
 
 	MT_CmMatrix4x4(
@@ -94,11 +95,11 @@ public :
 	getPointer(
 	) const;
 
-		void
-	setElem(
-		int pos,
-		double newvalue
-	);
+	template <typename T>
+	void setElem(int pos, T newvalue)
+	{
+		m_Vflat[pos] = (double)newvalue;
+	}
 
 		MT_Vector3
 	GetRight(
diff --git a/intern/moto/include/MT_Matrix3x3.h b/intern/moto/include/MT_Matrix3x3.h
index 17dd533..eac629e 100644
--- a/intern/moto/include/MT_Matrix3x3.h
+++ b/intern/moto/include/MT_Matrix3x3.h
@@ -55,8 +55,8 @@
 class MT_Matrix3x3 {
 public:
     MT_Matrix3x3() {}
-    MT_Matrix3x3(const float *m) { setValue(m); }
-    MT_Matrix3x3(const double *m) { setValue(m); }
+    template <typename T>
+    MT_Matrix3x3(const T *m) { setValue(m); }
     MT_Matrix3x3(const MT_Quaternion& q) { setRotation(q); }
     
 	MT_Matrix3x3(const MT_Quaternion& q, const MT_Vector3& s) { 
@@ -97,28 +97,18 @@ public:
 		m_el[i][2] = v[2];
 	}
     
-    void setValue(const float *m) {
+    template <typename T>
+    void setValue(const T *m) {
         m_el[0][0] = *m++; m_el[1][0] = *m++; m_el[2][0] = *m++; m++;
         m_el[0][1] = *m++; m_el[1][1] = *m++; m_el[2][1] = *m++; m++;
         m_el[0][2] = *m++; m_el[1][2] = *m++; m_el[2][2] = *m;
     }
 
-    void setValue(const double *m) {
-        m_el[0][0] = *m++; m_el[1][0] = *m++; m_el[2][0] = *m++; m++;
-        m_el[0][1] = *m++; m_el[1][1] = *m++; m_el[2][1] = *m++; m++;
-        m_el[0][2] = *m++; m_el[1][2] = *m++; m_el[2][2] = *m;
-    }
-
-    void setValue3x3(const float *m) {
-        m_el[0][0] = *m++; m_el[1][0] = *m++; m_el[2][0] = *m++;
-        m_el[0][1] = *m++; m_el[1][1] = *m++; m_el[2][1] = *m++;
-        m_el[0][2] = *m++; m_el[1][2] = *m++; m_el[2][2] = *m;
-    }
-
-    void setValue3x3(const double *m) {
-        m_el[0][0] = *m++; m_el[1][0] = *m++; m_el[2][0] = *m++;
-        m_el[0][1] = *m++; m_el[1][1] = *m++; m_el[2][1] = *m++;
-        m_el[0][2] = *m++; m_el[1][2] = *m++; m_el[2][2] = *m;
+    template <typename T>
+    void setValue3x3(const T *m) {
+        m_el[0][0] = (MT_Scalar)*m++; m_el[1][0] = (MT_Scalar)*m++; m_el[2][0] = (MT_Scalar)*m++;
+        m_el[0][1] = (MT_Scalar)*m++; m_el[1][1] = (MT_Scalar)*m++; m_el[2][1] = (MT_Scalar)*m++;
+        m_el[0][2] = (MT_Scalar)*m++; m_el[1][2] = (MT_Scalar)*m++; m_el[2][2] = (MT_Scalar)*m;
     }
 
     void setValue(MT_Scalar xx, MT_Scalar xy, MT_Scalar xz, 
@@ -205,28 +195,18 @@ public:
                  MT_Scalar(0.0), MT_Scalar(0.0), MT_Scalar(1.0)); 
     }
     
-    void getValue(float *m) const {
-        *m++ = (float) m_el[0][0]; *m++ = (float) m_el[1][0]; *m++ = (float) m_el[2][0]; *m++ = (float) 0.0;
-        *m++ = (float) m_el[0][1]; *m++ = (float) m_el[1][1]; *m++ = (float) m_el[2][1]; *m++ = (float) 0.0;
-        *m++ = (float) m_el[0][2]; *m++ = (float) m_el[1][2]; *m++ = (float) m_el[2][2]; *m   = (float) 0.0;
-    }
-
-    void getValue(double *m) const {
-        *m++ = m_el[0][0]; *m++ = m_el[1][0]; *m++ = m_el[2][0]; *m++ = 0.0;
-        *m++ = m_el[0][1]; *m++ = m_el[1][1]; *m++ = m_el[2][1]; *m++ = 0.0;
-        *m++ = m_el[0][2]; *m++ = m_el[1][2]; *m++ = m_el[2][2]; *m   = 0.0;
-    }
-
-    void getValue3x3(float *m) const {
-        *m++ = (float) m_el[0][0]; *m++ = (float) m_el[1][0]; *m++ = (float) m_el[2][0];
-        *m++ = (float) m_el[0][1]; *m++ = (float) m_el[1][1]; *m++ = (float) m_el[2][1];
-        *m++ = (float) m_el[0][2]; *m++ = (float) m_el[1][2]; *m++ = (float) m_el[2][2];
+    template <typename T>
+    void getValue(T *m) const {
+        *m++ = (T)m_el[0][0]; *m++ = (T)m_el[1][0]; *m++ = (T)m_el[2][0]; *m++ = (T)0;
+        *m++ = (T)m_el[0][1]; *m++ = (T)m_el[1][1]; *m++ = (T)m_el[2][1]; *m++ = (T)0;
+        *m++ = (T)m_el[0][2]; *m++ = (T)m_el[1][2]; *m++ = (T)m_el[2][2]; *m   = (T)0;
     }
 
-    void getValue3x3(double *m) const {
-        *m++ = m_el[0][0]; *m++ = m_el[1][0]; *m++ = m_el[2][0];
-        *m++ = m_el[0][1]; *m++ = m_el[1][1]; *m++ = m_el[2][1];
-        *m++ = m_el[0][2]; *m++ = m_el[1][2]; *m++ = m_el[2][2];
+    template <typename T>
+    void getValue3x3(T *m) const {
+        *m++ = (T)m_el[0][0]; *m++ = (T)m_el[1][0]; *m++ = (T)m_el[2][0];
+        *m++ = (T)m_el[0][1]; *m++ = (T)m_el[1][1]; *m++ = (T)m_el[2][1];
+        *m++ = (T)m_el[0][2]; *m++ = (T)m_el[1][2]; *m++ = (T)m_el[2][2];
     }
 
     MT_Quaternion getRotation() const;
diff --git a/intern/moto/include/MT_Matrix4x4.h b/intern/moto/include/MT_Matrix4x4.h
index de2ea99..c9d7b6f 100644
--- a/intern/moto/include/MT_Matrix4x4.h
+++ b/intern/moto/include/MT_Matrix4x4.h
@@ -55,11 +55,8 @@ public:
 	/**
 	 * Initialize all fields with the values pointed at by m. A
 	 * contigous block of 16 values is read.  */
-    MT_Matrix4x4(const float *m) { setValue(m); }
-	/**
-	 * Initialize all fields with the values pointed at by m. A
-	 * contigous block of 16 values is read.  */
-    MT_Matrix4x4(const double *m) { setValue(m); }
+	template <typename T>
+    MT_Matrix4x4(const T *m) { setValue(m); }
     
 	/**
 	 * Initialise with these 16 explicit values.
@@ -101,23 +98,14 @@ public:
 
     /**
 	 * Set the matrix to the values pointer at by m. A contiguous
-	 * block of 16 values is copied.  */
-    void setValue(const float *m) {
-        m_el[0][0] = *m++; m_el[1][0] = *m++; m_el[2][0] = *m++; m_el[3][0] = *m++;
-        m_el[0][1] = *m++; m_el[1][1] = *m++; m_el[2][1] = *m++; m_el[3][1] = *m++;
-        m_el[0][2] = *m++; m_el[1][2] = *m++; m_el[2][2] = *m++; m_el[3][2] = *m++;
-        m_el[0][3] = *m++; m_el[1][3] = *m++; m_el[2][3] = *m++; m_el[3][3] = *m;
-    }
-
-    /**
-	 * Set the matrix to the values pointer at by m. A contiguous
-	 * block of 16 values is copied.
+	 * block of 16 values is copied.  
 	 */
-    void setValue(const double *m) {
-        m_el[0][0] = *m++; m_el[1][0] = *m++; m_el[2][0] = *m++; m_el[3][0] = *m++;
-        m_el[0][1] = *m++; m_el[1][1] = *m++; m_el[2][1] = *m++; m_el[3][1] = *m++;
-        m_el[0][2] = *m++; m_el[1][2] = *m++; m_el[2][2] = *m++; m_el[3][2] = *m++;
-        m_el[0][3] = *m++; m_el[1][3] = *m++; m_el[2][3] = *m++; m_el[3][3] = *m;
+    template <typename T>
+    void setValue(const T *m) {
+        m_el[0][0] = (MT_Scalar)*m++; m_el[1][0] = (MT_Scalar)*m++; m_el[2][0] = (MT_Scalar)*m++; m_el[3][0] = (MT_Scalar)*m++;
+        m_el[0][1] = (MT_Scalar)*m++; m_el[1][1] = (MT_Scalar)*m++; m_el[2][1] = (MT_Scalar)*m++; m_el[3][1] = (MT_Scalar)*m++;
+        m_el[0][2] = (MT_Scalar)*m++; m_el[1][2] = (MT_Scalar)*m++; m_el[2][2] = (MT_Scalar)*m++; m_el[3][2] = (MT_Scalar)*m++;
+        m_el[0][3] = (MT_Scalar)*m++; m_el[1][3] = (MT_Scalar)*m++; m_el[2][3] = (MT_Scalar)*m++; m_el[3][3] = (MT_Scalar)*m;
     }
 
     /**
@@ -166,28 +154,20 @@ public:
 	/**
 	 * Read the element from row i, column j.
 	 */
-	float getElement(int i, int j) {
-		return (float) m_el[i][j];
+	template <typename T>
+	T getElement(int i, int j) {
+		return (T)m_el[i][j];
 	}
 	
     /**
 	 * Copy the contents to a contiguous block of 16 floats.
 	 */
-    void getValue(float *m) const {
-        *m++ = (float) m_el[0][0]; *m++ = (float) m_el[1][0]; *m++ = (float) m_el[2][0]; *m++ = (float) m_el[3][0];
-        *m++ = (float) m_el[0][1]; *m++ = (float) m_el[1][1]; *m++ = (float) m_el[2][1]; *m++ = (float) m_el[3][1];
-        *m++ = (float) m_el[0][2]; *m++ = (float) m_el[1][2]; *m++ = (float) m_el[2][2]; *m++ = (float) m_el[3][2];
-        *m++ = (float) m_el[0][3]; *m++ = (float) m_el[1][3]; *m++ = (float) m_el[2][3]; *m = (float) m_el[3][3];
-    }
-
-    /**
-	 * Copy the contents to a contiguous block of 16 doubles.
-	 */
-    void getValue(double *m) const {
-        *m++ = m_el[0][0]; *m++ = m_el[1][0]; *m++ = m_el[2][0]; *m++ = m_el[3][0];
-        *m++ = m_el[0][1]; *m++ = m_el[1][1]; *m++ = m_el[2][1]; *m++ = m_el[3][1];
-        *m++ = m_el[0][2]; *m++ = m_el[1][2]; *m++ = m_el[2][2]; *m++ = m_el[3][2];
-        *m++ = m_el[0][3]; *m++ = m_el[1][3]; *m++ = m_el[2][3]; *m = m_el[3][3];
+    template <typename T>
+    void getValue(T *m) const {
+        *m++ = (T)m_el[0][0]; *m++ = (T)m_el[1][0]; *m++ = (T)m_el[2][0]; *m++ = (T)m_el[3][0];
+        *m++ = (T)m_el[0][1]; *m++ = (T)m_el[1][1]; *m++ = (T)m_el[2][1]; *m++ = (T)m_el[3][1];
+        *m++ = (T)m_el[0][2]; *m++ = (T)m_el[1][2]; *m++ = (T)m_el[2][2]; *m++ = (T)m_el[3][2];
+        *m++ = (T)m_el[0][3]; *m++ = (T)m_el[1][3]; *m++ = (T)m_el[2][3]; *m =   (T)m_el[3][3];
     }
 
 	/** 
diff --git a/intern/moto/include/MT_Point2.h b/intern/moto/include/MT_Point2.h
index 587379b..53eba1d 100644
--- a/intern/moto/include/MT_Point2.h
+++ b/intern/moto/include/MT_Point2.h
@@ -52,8 +52,8 @@
 class MT_Point2 : public MT_Vector2 {
 public:
     MT_Point2() {}
-    MT_Point2(const float *v2) : MT_Vector2(v2) {} 
-    MT_Point2(const double *v2) : MT_Vector2(v2) {}
+    template <typename T>
+    MT_Point2(const T *v2) : MT_Vector2(v2) {} 
     MT_Point2(MT_Scalar x2, MT_Scalar y2) : MT_Vector2(x2, y2) {}
 
     MT_Point2& operator+=(const MT_Vector2& v);
diff --git a/intern/moto/include/MT_Point3.h b/intern/moto/include/MT_Point3.h
index f19b2e2..8b0431c 100644
--- a/intern/moto/include/MT_Point3.h
+++ b/intern/moto/include/MT_Point3.h
@@ -52,8 +52,8 @@
 class MT_Point3 : public MT_Vector3 {
 public:
     MT_Point3() {}
-    MT_Point3(const float *v) : MT_Vector3(v) {} 
-    MT_Point3(const double *v) : MT_Vector3(v) {}
+    template <typename T>
+    MT_Point3(const T *v) : MT_Vector3(v) {} 
     MT_Point3(MT_Scalar xx, MT_Scalar yy, MT_Scalar zz) : MT_Vector3(xx, yy, zz) {}
 
     MT_Point3& operator+=(const MT_Vector3& v);
diff --git a/intern/moto/include/MT_Quaternion.h b/intern/moto/include/MT_Quaternion.h
index 4

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list