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)