comparison src/data.cc @ 10352:a3635bc1ea19

remove Array2
author Jaroslav Hajek <highegg@gmail.com>
date Tue, 23 Feb 2010 16:12:27 +0100
parents 12884915a8e4
children a0b51ac0f88a
comparison
equal deleted inserted replaced
10351:5150ceb4dbb4 10352:a3635bc1ea19
4889 { 4889 {
4890 error ("reshape: invalid arguments"); 4890 error ("reshape: invalid arguments");
4891 return retval; 4891 return retval;
4892 } 4892 }
4893 4893
4894 // Remove trailing singletons in new_size, but leave at least 2 4894 dim_vector new_dims = dim_vector::alloc (new_size.length ());
4895 // elements. 4895
4896 4896 for (octave_idx_type i = 0; i < new_size.length (); i++)
4897 int n = new_size.length (); 4897 {
4898 4898 if (new_size(i) < 0)
4899 while (n > 2) 4899 {
4900 { 4900 error ("reshape: size must be nonnegative");
4901 if (new_size(n-1) == 1) 4901 break;
4902 n--; 4902 }
4903 else 4903 else
4904 break; 4904 new_dims(i) = new_size(i);
4905 } 4905 }
4906 4906
4907 if (n < 2) 4907 if (! error_state)
4908 { 4908 retval = args(0).reshape (new_dims);
4909 error ("reshape: expecting size to be vector with at least 2 elements");
4910 return retval;
4911 }
4912
4913 dim_vector new_dims;
4914
4915 new_dims.resize (n);
4916
4917 for (octave_idx_type i = 0; i < n; i++)
4918 new_dims(i) = new_size(i);
4919
4920 octave_value arg = args(0);
4921
4922 dim_vector dims = arg.dims ();
4923
4924 if (new_dims.numel () == dims.numel ())
4925 retval = (new_dims == dims) ? arg : arg.reshape (new_dims);
4926 else
4927 {
4928 std::string dims_str = dims.str ();
4929 std::string new_dims_str = new_dims.str ();
4930
4931 error ("reshape: can't reshape %s array to %s array",
4932 dims_str.c_str (), new_dims_str.c_str ());
4933 }
4934 4909
4935 return retval; 4910 return retval;
4936 } 4911 }
4937 4912
4938 /* 4913 /*