Mercurial > hg > octave-lyh
comparison src/data.cc @ 10350:12884915a8e4
merge MArray classes & improve Array interface
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Sat, 23 Jan 2010 21:41:03 +0100 |
parents | 57a59eae83cc |
children | a3635bc1ea19 |
comparison
equal
deleted
inserted
replaced
10349:d4d13389c957 | 10350:12884915a8e4 |
---|---|
1890 | 1890 |
1891 #define SINGLE_TYPE_CONCAT(TYPE, EXTRACTOR) \ | 1891 #define SINGLE_TYPE_CONCAT(TYPE, EXTRACTOR) \ |
1892 do \ | 1892 do \ |
1893 { \ | 1893 { \ |
1894 int dv_len = dv.length (); \ | 1894 int dv_len = dv.length (); \ |
1895 Array<octave_idx_type> ra_idx (dv_len > 1 ? dv_len : 2, 0); \ | 1895 Array<octave_idx_type> ra_idx (dv_len > 1 ? dv_len : 2, 1, 0); \ |
1896 \ | 1896 \ |
1897 for (int j = 1; j < n_args; j++) \ | 1897 for (int j = 1; j < n_args; j++) \ |
1898 { \ | 1898 { \ |
1899 octave_quit (); \ | 1899 octave_quit (); \ |
1900 \ | 1900 \ |
2071 | 2071 |
2072 if (error_state) | 2072 if (error_state) |
2073 return retval; | 2073 return retval; |
2074 | 2074 |
2075 int dv_len = dv.length (); | 2075 int dv_len = dv.length (); |
2076 Array<octave_idx_type> ra_idx (dv_len, 0); | 2076 Array<octave_idx_type> ra_idx (dv_len, 1, 0); |
2077 | 2077 |
2078 for (int j = 1; j < n_args; j++) | 2078 for (int j = 1; j < n_args; j++) |
2079 { | 2079 { |
2080 // Can't fast return here to skip empty matrices as something | 2080 // Can't fast return here to skip empty matrices as something |
2081 // like cat(1,[],single([])) must return an empty matrix of | 2081 // like cat(1,[],single([])) must return an empty matrix of |
4833 | 4833 |
4834 if (nargin == 2) | 4834 if (nargin == 2) |
4835 new_size = args(1).int_vector_value (); | 4835 new_size = args(1).int_vector_value (); |
4836 else if (nargin > 2) | 4836 else if (nargin > 2) |
4837 { | 4837 { |
4838 new_size.resize (nargin-1); | 4838 new_size.resize (1, nargin-1); |
4839 int empty_dim = -1; | 4839 int empty_dim = -1; |
4840 | 4840 |
4841 for (int i = 1; i < nargin; i++) | 4841 for (int i = 1; i < nargin; i++) |
4842 { | 4842 { |
4843 if (args(i).is_empty ()) | 4843 if (args(i).is_empty ()) |
4901 if (new_size(n-1) == 1) | 4901 if (new_size(n-1) == 1) |
4902 n--; | 4902 n--; |
4903 else | 4903 else |
4904 break; | 4904 break; |
4905 } | 4905 } |
4906 | |
4907 new_size.resize (n); | |
4908 | 4906 |
4909 if (n < 2) | 4907 if (n < 2) |
4910 { | 4908 { |
4911 error ("reshape: expecting size to be vector with at least 2 elements"); | 4909 error ("reshape: expecting size to be vector with at least 2 elements"); |
4912 return retval; | 4910 return retval; |
6366 error ("accumarray: index out of range"); | 6364 error ("accumarray: index out of range"); |
6367 | 6365 |
6368 NDT retval (dim_vector (n, 1), zero_val); | 6366 NDT retval (dim_vector (n, 1), zero_val); |
6369 | 6367 |
6370 // Pick minimizer or maximizer. | 6368 // Pick minimizer or maximizer. |
6371 void (MArrayN<T>::*op) (const idx_vector&, const MArrayN<T>&) = | 6369 void (MArray<T>::*op) (const idx_vector&, const MArray<T>&) = |
6372 ismin ? (&MArrayN<T>::idx_min) : (&MArrayN<T>::idx_max); | 6370 ismin ? (&MArray<T>::idx_min) : (&MArray<T>::idx_max); |
6373 | 6371 |
6374 octave_idx_type l = idx.length (n); | 6372 octave_idx_type l = idx.length (n); |
6375 if (vals.numel () == 1) | 6373 if (vals.numel () == 1) |
6376 (retval.*op) (idx, NDT (dim_vector (l, 1), vals(0))); | 6374 (retval.*op) (idx, NDT (dim_vector (l, 1), vals(0))); |
6377 else if (vals.numel () == l) | 6375 else if (vals.numel () == l) |