From e11bc00a5f1394246d7e0e2a4b78f0b6a67f4d3f Mon Sep 17 00:00:00 2001
From: Amorilia <amorilia@users.sourceforge.net>
Date: Sat, 10 Jul 2010 13:25:34 +0100
Subject: [PATCH] Bugfix in array struct when class T is float.

---
 include/nif_basic_types.h | 60 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/include/nif_basic_types.h b/include/nif_basic_types.h
index 07a7c101..4a65b702 100644
--- a/include/nif_basic_types.h
+++ b/include/nif_basic_types.h
@@ -83,6 +83,9 @@ struct array {
 		for ( size_t i = 0; i < size; ++i )
 			data[i] = T();
 	}
+// XXX ellipsis does not work when T = float
+// XXX see for instance http://support.microsoft.com/kb/71424
+/*
 	array(size_t n, ...) {
 		va_list argptr;
 		va_start(argptr, n);
@@ -91,6 +94,63 @@ struct array {
 		for ( size_t i = n; i < size; ++i )
 			data[i] = T();
 	}
+*/
+	array(size_t n, T t0) {
+		data[0] = t0;
+		for ( size_t i = 1; i < size; ++i )
+			data[i] = T();
+	}
+	array(size_t n, T t0, T t1) {
+		data[0] = t0;
+		data[1] = t1;
+		for ( size_t i = 2; i < size; ++i )
+			data[i] = T();
+	}
+	array(size_t n, T t0, T t1, T t2) {
+		data[0] = t0;
+		data[1] = t1;
+		data[2] = t2;
+		for ( size_t i = 3; i < size; ++i )
+			data[i] = T();
+	}
+	array(size_t n, T t0, T t1, T t2, T t3) {
+		data[0] = t0;
+		data[1] = t1;
+		data[2] = t2;
+		data[3] = t3;
+		for ( size_t i = 4; i < size; ++i )
+			data[i] = T();
+	}
+	array(size_t n, T t0, T t1, T t2, T t3, T t4) {
+		data[0] = t0;
+		data[1] = t1;
+		data[2] = t2;
+		data[3] = t3;
+		data[4] = t4;
+		for ( size_t i = 5; i < size; ++i )
+			data[i] = T();
+	}
+	array(size_t n, T t0, T t1, T t2, T t3, T t4, T t5) {
+		data[0] = t0;
+		data[1] = t1;
+		data[2] = t2;
+		data[3] = t3;
+		data[4] = t4;
+		data[5] = t5;
+		for ( size_t i = 6; i < size; ++i )
+			data[i] = T();
+	}
+  array(size_t n, T t0, T t1, T t2, T t3, T t4, T t5, T t6) {
+		data[0] = t0;
+		data[1] = t1;
+		data[2] = t2;
+		data[3] = t3;
+		data[4] = t4;
+		data[5] = t5;
+		data[6] = t6;
+		for ( size_t i = 7; i < size; ++i )
+			data[i] = T();
+	}
 	~array() {}
 	T & operator[]( unsigned int index ) {
 		return data[index];
-- 
GitLab