12 #if VXL_LITTLE_ENDIAN // #ifdef i386 13 # define native_BYTE_ORDER vnl_matlab_header::vnl_LITTLE_ENDIAN 15 # define native_BYTE_ORDER vnl_matlab_header::vnl_BIG_ENDIAN 18 static void vnl_write_bytes(std::ostream &s,
void const *p,
unsigned bytes)
20 s.write((
char const *)p, bytes);
32 static long vnl_is_complex(
float const &) {
return 0; }
33 static long vnl_is_complex(
double const &) {
return 0; }
34 static long vnl_is_complex(std::complex<float>
const &) {
return 1; }
35 static long vnl_is_complex(std::complex<double>
const &) {
return 1; }
38 static void vnl_write_real(std::ostream &s,
float const *data,
unsigned n)
39 { ::vnl_write_bytes(s, data, n*
sizeof(*data)); }
41 static void vnl_write_real(std::ostream &s,
double const *data,
unsigned n)
42 { ::vnl_write_bytes(s, data, n*
sizeof(*data)); }
44 static void vnl_write_real(std::ostream &s, std::complex<float>
const *data,
unsigned n)
47 for (
unsigned i=0; i<n; ++i) {
48 dummy = std::real(data[i]);
49 ::vnl_write_bytes(s, &dummy,
sizeof(dummy));
53 static void vnl_write_real(std::ostream &s, std::complex<double>
const *data,
unsigned n)
56 for (
unsigned i=0; i<n; ++i) {
57 dummy = std::real(data[i]);
58 ::vnl_write_bytes(s, &dummy,
sizeof(dummy));
64 static void vnl_write_imag(std::ostream &,
float const *,
unsigned ) { }
66 static void vnl_write_imag(std::ostream &,
double const *,
unsigned ) { }
68 static void vnl_write_imag(std::ostream &s, std::complex<float>
const *data,
unsigned n)
71 for (
unsigned i=0; i<n; ++i) {
72 dummy = std::imag(data[i]);
73 ::vnl_write_bytes(s, &dummy,
sizeof(dummy));
77 static void vnl_write_imag(std::ostream &s, std::complex<double>
const *data,
unsigned n)
80 for (
unsigned i=0; i<n; ++i) {
81 dummy = std::imag(data[i]);
82 ::vnl_write_bytes(s, &dummy,
sizeof(dummy));
96 hdr.
imag = vnl_is_complex(x);
97 hdr.
namlen = (
unsigned long)std::strlen(name)+1L;
99 ::vnl_write_bytes(s, &hdr,
sizeof(hdr));
100 ::vnl_write_bytes(s, name, hdr.
namlen);
101 vnl_write_real(s, &x, 1);
102 vnl_write_imag(s, &x, 1);
104 return s.good() != 0;
106 #define scalar_instantiate(T) \ 107 template VNL_EXPORT bool vnl_matlab_write(std::ostream &, T const &, char const *); 117 hdr.
imag = vnl_is_complex(
v[0]);
118 hdr.
namlen = (
unsigned long)std::strlen(name)+1L;
120 ::vnl_write_bytes(s, &hdr,
sizeof(hdr));
121 ::vnl_write_bytes(s, name, hdr.
namlen);
122 vnl_write_real(s,
v, n);
123 vnl_write_imag(s,
v, n);
125 return s.good() != 0;
127 #define array1D_instantiate(T) \ 128 template VNL_EXPORT bool vnl_matlab_write(std::ostream &, T const *, unsigned, char const *); 133 T
const *
const *data,
134 unsigned rows,
unsigned cols,
139 hdr.
rows = (long)rows;
140 hdr.
cols = (long)cols;
141 hdr.
imag = vnl_is_complex(data[0][0]);
142 hdr.
namlen = (
unsigned long)std::strlen(name)+1L;
144 ::vnl_write_bytes(s, &hdr,
sizeof(hdr));
145 ::vnl_write_bytes(s, name, hdr.
namlen);
146 for (
unsigned i=0; i<rows; ++i)
147 vnl_write_real(s, data[i], cols);
148 for (
unsigned i=0; i<rows; ++i)
149 vnl_write_imag(s, data[i], cols);
151 return s.good() != 0;
153 #define array2D_instantiate(T) \ 154 template VNL_EXPORT bool vnl_matlab_write(std::ostream &, T const * const *, unsigned, unsigned, char const *);
#define array2D_instantiate(T)
#define native_BYTE_ORDER
bool vnl_matlab_write(std::ostream &s, T const &x, char const *name)
scalars.
#define array1D_instantiate(T)
#define scalar_instantiate(T)