diff liboctave/data-conv.cc @ 5760:8d7162924bd3

[project @ 2006-04-14 04:01:37 by jwe]
author jwe
date Fri, 14 Apr 2006 04:01:40 +0000
parents 4c8a2e4e0717
children ace8d8d26933
line wrap: on
line diff
--- a/liboctave/data-conv.cc
+++ b/liboctave/data-conv.cc
@@ -28,6 +28,7 @@
 #include <cctype>
 
 #include <iostream>
+#include <vector>
 
 #include "byte-swap.h"
 #include "data-conv.h"
@@ -469,14 +470,12 @@
     { \
       if (len > 0) \
 	{ \
-	  volatile TYPE *ptr = X_CAST (volatile TYPE *, data); \
-	  stream.read (X_CAST (char *, ptr), size * len); \
+	  OCTAVE_LOCAL_BUFFER (TYPE, ptr, len); \
+	  stream.read (reinterpret_cast<char *>  (ptr), size * len); \
 	  if (swap) \
 	    swap_bytes< size > (ptr, len); \
-	  TYPE tmp = ptr[0]; \
-	  for (int i = len - 1; i > 0; i--) \
+	  for (int i = 0; i < len; i++) \
 	    data[i] = ptr[i]; \
-	  data[0] = tmp; \
 	} \
     } \
   while (0)
@@ -489,13 +488,12 @@
     { \
       if (len > 0) \
 	{ \
-	  char tmp_type = static_cast<char> (type); \
+	  char tmp_type = type; \
 	  stream.write (&tmp_type, 1); \
-	  TYPE *ptr = new TYPE [len]; \
+	  OCTAVE_LOCAL_BUFFER (TYPE, ptr, len); \
 	  for (int i = 0; i < len; i++) \
-	    ptr[i] = X_CAST (TYPE, data[i]); \
-	  stream.write (X_CAST (char *, ptr), size * len); \
-	  delete [] ptr ; \
+	    ptr[i] = static_cast <TYPE> (data[i]);	   \
+	  stream.write (reinterpret_cast<char *> (ptr), size * len); \
 	} \
     } \
   while (0)
@@ -1027,18 +1025,16 @@
 
     case LS_FLOAT:
       {
-	volatile float *ptr = X_CAST (float *, data);
-	is.read (X_CAST (char *, data), 4 * len);
-	do_float_format_conversion (data, len, fmt);
-	float tmp = ptr[0];
-	for (int i = len - 1; i > 0; i--)
+	OCTAVE_LOCAL_BUFFER (float, ptr, len);
+	is.read (reinterpret_cast<char *> (ptr), 4 * len);
+	do_float_format_conversion (ptr, len, fmt);
+	for (int i = 0; i < len; i++)
 	  data[i] = ptr[i];
-	data[0] = tmp;
       }
       break;
 
     case LS_DOUBLE: // No conversion necessary.
-      is.read (X_CAST (char *, data), 8 * len);
+      is.read (reinterpret_cast<char *> (data), 8 * len);
       do_double_format_conversion (data, len, fmt);
       break;
 
@@ -1083,9 +1079,9 @@
 
     case LS_DOUBLE: // No conversion necessary.
       {
-	char tmp_type = X_CAST (char, type);
+	char tmp_type = static_cast<char> (type);
 	os.write (&tmp_type, 1);
-	os.write (X_CAST (char *, data), 8 * len);
+	os.write (reinterpret_cast <const char *> (data), 8 * len);
       }
       break;