types.h

changeset 147
291a1fe2d278
parent 140
2e8c1626aef7
child 160
edcb03f3ef75
--- a/types.h	Sun Apr 28 04:04:36 2013 +0300
+++ b/types.h	Fri May 03 03:55:21 2013 +0300
@@ -40,6 +40,9 @@
 
 class matrix;
 
+enum Axis { X, Y, Z };
+static const Axis g_Axes[3] = {X, Y, Z};
+
 // =============================================================================
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 // =============================================================================
@@ -50,16 +53,19 @@
 // =============================================================================
 class vertex {
 public:
-	double x, y, z;
+	double m_coords[3];
 	
 	vertex () {}
-	vertex (double x, double y, double z) : x (x), y (y), z (z) {}
+	vertex (double x, double y, double z) {
+		m_coords[X] = x;
+		m_coords[Y] = y;
+		m_coords[Z] = z;
+	}
 	
 	// =========================================================================
 	void move (vertex other) {
-		x += other.x;
-		y += other.y;
-		z += other.z;
+		for (const Axis ax : g_Axes)
+			m_coords[ax] += other[ax];
 	}
 	
 	// =========================================================================
@@ -76,20 +82,27 @@
 	
 	// =========================================================================
 	vertex& operator/= (const double d) {
-		x /= d;
-		y /= d;
-		z /= d;
+		for (const Axis ax : g_Axes)
+			m_coords[ax] /= d;
 		return *this;
 	}
 	
 	// =========================================================================
 	vertex operator- () const {
-		return vertex (-x, -y, -z);
+		return vertex (-m_coords[X], -m_coords[Y], -m_coords[Z]);
 	}
 	
 	// =========================================================================
-	double coord (const ushort n) const {
-		return *(&x + n);
+	double& coord (const ushort n) const {
+		return const_cast<double&> (m_coords[n]);
+	}
+	
+	double& operator[] (const Axis ax) const {
+		return coord ((ushort) ax);
+	}
+	
+	double& operator[] (const ushort n) const {
+		return coord (n);
 	}
 	
 	// =========================================================================

mercurial