Mercurial > hg > octave-lyh
diff src/utils.cc @ 4481:cfbaee1f562f
[project @ 2003-08-06 13:56:07 by jwe]
author | jwe |
---|---|
date | Wed, 06 Aug 2003 13:56:07 +0000 |
parents | 7afd4bf05aa8 |
children | 1fa73cab40a0 |
line wrap: on
line diff
--- a/src/utils.cc +++ b/src/utils.cc @@ -766,6 +766,63 @@ } void +check_dimensions (Array<int>& dim, const char *warnfor) +{ + bool neg = false; + + int n = dim.length (); + for (int i = 0; i < dim.length (); i++) + { + if (dim(i) < 0) + { + dim(i) = 0; + neg = true; + } + } + + if (neg && Vwarn_neg_dim_as_zero) + { + warning ("%s: converting negative dimension to zero", warnfor); + } +} + + +void +get_dimensions (const octave_value& a, const char *warn_for, + Array<int>& dim) +{ + if (a.is_scalar_type ()) + { + dim.resize (2); + dim(0) = a.nint_value (); + dim(1) = dim(0); + } + else + { + int nr = a.rows (); + int nc = a.columns (); + + if (nr == 1 || nc == 1) + { + Array<double> v = a.vector_value (); + + if (error_state) + return; + + int n = v.length (); + dim.resize (n); + for (int i = 0; i < n; i++) + dim(i) = NINT (v(i)); + } + else + warning ("%s (A): use %s (size (A)) instead", warn_for, warn_for); + } + + check_dimensions (dim, warn_for); // May set error_state. +} + + +void get_dimensions (const octave_value& a, const char *warn_for, int& nr, int& nc) {