1 // This is core/vnl/vnl_matlab_print.hxx
2 // It is different from vnl_matlab_print.cxx
3 #ifndef vnl_matlab_print_hxx_
4 #define vnl_matlab_print_hxx_
5 // \author fsm
6 // Adapted from awf's MatOps class.
7 
8 #include <iostream>
9 #include "vnl_matlab_print.h"
10 
11 #ifdef _MSC_VER
12 #  include <vcl_msvc_warnings.h>
13 #endif
14 
15 #include "vnl_vector.h"
16 #include "vnl_matrix.h"
17 #include "vnl_vector_fixed.h"
18 #include "vnl_matrix_fixed.h"
19 #include "vnl_matrix_ref.h"
20 #include "vnl_diag_matrix.h"
21 #include "vnl_matlab_print_scalar.h"
22 
23 //--------------------------------------------------------------------------------
24 
25 template <class T>
vnl_matlab_print(std::ostream & s,T const * array,unsigned length,vnl_matlab_print_format format)26 std::ostream &vnl_matlab_print(std::ostream& s,
27                               T const* array,
28                               unsigned length,
29                               vnl_matlab_print_format format)
30 {
31   char buf[1024];
32   for (unsigned j=0; j<length; j++ ) {
33     // Format according to selected style
34     // In both cases an exact 0 goes out as such
35     vnl_matlab_print_scalar(array[j], buf, format);
36     s << buf;
37   }
38 
39   return s;
40 }
41 
42 template <class T>
vnl_matlab_print(std::ostream & s,T const * const * array,unsigned rows,unsigned cols,vnl_matlab_print_format format)43 std::ostream &vnl_matlab_print(std::ostream &s,
44                               T const * const *array,
45                               unsigned rows, unsigned cols,
46                               vnl_matlab_print_format format)
47 {
48   for (unsigned i=0; i<rows; ++i)
49     vnl_matlab_print(s, array[i], cols, format) << '\n';
50   return s;
51 }
52 
53 template <class T>
vnl_matlab_print(std::ostream & s,vnl_diag_matrix<T> const & D,char const * variable_name,vnl_matlab_print_format format)54 std::ostream& vnl_matlab_print(std::ostream& s,
55                               vnl_diag_matrix<T> const& D,
56                               char const* variable_name,
57                               vnl_matlab_print_format format)
58 {
59   if (variable_name)
60     s << variable_name << " = diag([ ";
61 
62   vnl_matlab_print(s, D.begin(), D.size(), format);
63 
64   if (variable_name)
65     s << " ])\n";
66 
67   return s;
68 }
69 
70 template <class T>
vnl_matlab_print(std::ostream & s,vnl_matrix<T> const & M,char const * variable_name,vnl_matlab_print_format format)71 std::ostream& vnl_matlab_print(std::ostream& s,
72                               vnl_matrix<T> const& M,
73                               char const* variable_name,
74                               vnl_matlab_print_format format)
75 {
76   if (variable_name)
77     s << variable_name << " = [ ...\n";
78 
79   if (variable_name && M.rows() == 0)
80     return s << "];\n";
81 
82   for (unsigned int i=0; i<M.rows(); i++ ) {
83     vnl_matlab_print(s, M[i], M.cols(), format);
84 
85     if (variable_name && (i == M.rows()-1))
86       s << " ]";
87 
88     s << '\n';
89   }
90 
91   return s;
92 }
93 
94 template <class T>
vnl_matlab_print(std::ostream & s,vnl_vector<T> const & v,char const * variable_name,vnl_matlab_print_format format)95 std::ostream& vnl_matlab_print(std::ostream& s,
96                               vnl_vector<T> const & v,
97                               char const* variable_name,
98                               vnl_matlab_print_format format)
99 {
100   if (variable_name)
101     s << variable_name << " = [ ";
102 
103   vnl_matlab_print(s, v.begin(), v.size(), format);
104 
105   if (variable_name)
106     s << " ]\n";
107 
108   return s;
109 }
110 
111 template <class T, unsigned int n, unsigned int m>
vnl_matlab_print(std::ostream & s,vnl_matrix_fixed<T,n,m> const & M,char const * variable_name,vnl_matlab_print_format format)112 std::ostream& vnl_matlab_print(std::ostream& s,
113                               vnl_matrix_fixed<T,n,m> const& M,
114                               char const* variable_name,
115                               vnl_matlab_print_format format)
116 {
117   if (variable_name)
118     s << variable_name << " = [ ...\n";
119 
120   if (variable_name && M.rows() == 0)
121     return s << "];\n";
122 
123   for (unsigned int i=0; i<n; ++i ) {
124     vnl_matlab_print(s, M[i], m, format);
125 
126     if (variable_name && (i == n-1))
127       s << " ]";
128 
129     s << '\n';
130   }
131 
132   return s;
133 }
134 
135 template <class T>
vnl_matlab_print(std::ostream & s,vnl_matrix_ref<T> const & M,char const * variable_name,vnl_matlab_print_format format)136 std::ostream& vnl_matlab_print(std::ostream& s,
137                               vnl_matrix_ref<T> const& M,
138                               char const* variable_name,
139                               vnl_matlab_print_format format)
140 {
141   if (variable_name)
142     s << variable_name << " = [ ...\n";
143 
144   if (variable_name && M.rows() == 0)
145     return s << "];\n";
146 
147   for (unsigned int i=0; i<M.rows(); ++i )
148   {
149     vnl_matlab_print(s, M[i], M.cols(), format);
150 
151     if (variable_name && (i == M.rows()-1))
152       s << " ]";
153 
154     s << '\n';
155   }
156 
157   return s;
158 }
159 
160 template <class T, unsigned int n>
vnl_matlab_print(std::ostream & s,vnl_vector_fixed<T,n> const & v,char const * variable_name,vnl_matlab_print_format format)161 std::ostream& vnl_matlab_print(std::ostream& s,
162                               vnl_vector_fixed<T,n> const & v,
163                               char const* variable_name,
164                               vnl_matlab_print_format format)
165 {
166   if (variable_name)
167     s << variable_name << " = [ ";
168 
169   vnl_matlab_print(s, v.begin(), n, format);
170 
171   if (variable_name)
172     s << " ]\n";
173 
174   return s;
175 }
176 
177 //--------------------------------------------------------------------------------
178 
179 #undef  VNL_MATLAB_PRINT_INSTANTIATE
180 #define VNL_MATLAB_PRINT_INSTANTIATE(T) \
181 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, T const*, unsigned, vnl_matlab_print_format); \
182 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, T const* const*, unsigned, unsigned, vnl_matlab_print_format); \
183 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_diag_matrix<T > const&, char const *, vnl_matlab_print_format); \
184 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix<T > const&, char const*, vnl_matlab_print_format); \
185 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector<T > const&, char const*, vnl_matlab_print_format); \
186 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_ref<T > const&, char const*, vnl_matlab_print_format); \
187 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,1,1> const&, char const*, vnl_matlab_print_format); \
188 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,2,2> const&, char const*, vnl_matlab_print_format); \
189 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,2,3> const&, char const*, vnl_matlab_print_format); \
190 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,3,2> const&, char const*, vnl_matlab_print_format); \
191 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,3,3> const&, char const*, vnl_matlab_print_format); \
192 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,2,4> const&, char const*, vnl_matlab_print_format); \
193 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,3,4> const&, char const*, vnl_matlab_print_format); \
194 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,4,3> const&, char const*, vnl_matlab_print_format); \
195 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,4,4> const&, char const*, vnl_matlab_print_format); \
196 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,6,8> const&, char const*, vnl_matlab_print_format); \
197 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,5,5> const&, char const*, vnl_matlab_print_format); \
198 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,6,6> const&, char const*, vnl_matlab_print_format); \
199 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,7,7> const&, char const*, vnl_matlab_print_format); \
200 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,8,8> const&, char const*, vnl_matlab_print_format); \
201 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,9,9> const&, char const*, vnl_matlab_print_format); \
202 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_matrix_fixed<T,10,10> const&, char const*, vnl_matlab_print_format); \
203 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector_fixed<T,1> const&, char const*, vnl_matlab_print_format); \
204 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector_fixed<T,2> const&, char const*, vnl_matlab_print_format); \
205 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector_fixed<T,3> const&, char const*, vnl_matlab_print_format); \
206 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector_fixed<T,4> const&, char const*, vnl_matlab_print_format); \
207 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector_fixed<T,5> const&, char const*, vnl_matlab_print_format); \
208 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector_fixed<T,6> const&, char const*, vnl_matlab_print_format); \
209 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector_fixed<T,7> const&, char const*, vnl_matlab_print_format); \
210 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector_fixed<T,8> const&, char const*, vnl_matlab_print_format); \
211 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector_fixed<T,9> const&, char const*, vnl_matlab_print_format); \
212 template VNL_EXPORT std::ostream &vnl_matlab_print(std::ostream &, vnl_vector_fixed<T,10> const&, char const*, vnl_matlab_print_format)
213 
214 #endif // vnl_matlab_print_hxx_
215