Mercurial > octave
diff src/mex.cc @ 6187:2a8922007c12
[project @ 2006-11-29 01:59:59 by jwe]
author | jwe |
---|---|
date | Wed, 29 Nov 2006 02:00:00 +0000 |
parents | 950d8cb39617 |
children | 160958073cde |
line wrap: on
line diff
--- a/src/mex.cc Tue Nov 28 20:13:40 2006 +0000 +++ b/src/mex.cc Wed Nov 29 02:00:00 2006 +0000 @@ -320,7 +320,18 @@ int get_m (void) const { return val.rows (); } - int get_n (void) const { return val.columns (); } + int get_n (void) const + { + int n = 1; + + // Force dims and ndims to be cached. + get_dimensions(); + + for (int i = ndims - 1; i > 0; i--) + n *= dims[i]; + + return n; + } int *get_dimensions (void) const { @@ -781,7 +792,15 @@ int get_m (void) const { return dims[0]; } - int get_n (void) const { return dims[1]; } + int get_n (void) const + { + int n = 1; + + for (int i = ndims - 1 ; i > 0 ; i--) + n *= dims[i]; + + return n; + } int *get_dimensions (void) const { return dims; } @@ -1641,9 +1660,8 @@ mxArray *get_field_by_number (int index, int key_num) const { - int idx = nfields * index + key_num; - - return data[idx]; + return key_num >= 0 && key_num < nfields + ? : data[nfields * index + key_num] : 0; } void set_field_by_number (int index, int key_num, mxArray *val); @@ -1756,7 +1774,10 @@ mxFree (data); } - mxArray *get_cell (int idx) const { return data[idx]; } + mxArray *get_cell (int idx) const + { + return idx >= 0 && idx < get_number_of_elements () ? data[idx] : 0; + } void set_cell (int idx, mxArray *val); @@ -2210,15 +2231,15 @@ void mxArray_struct::set_field_by_number (int index, int key_num, mxArray *val) { - int idx = nfields * index + key_num; - - data[idx] = maybe_unmark_array (val); + if (key_num >= 0 && key_num < nfields) + data[nfields * index + key_num] = maybe_unmark_array (val); } void mxArray_cell::set_cell (int idx, mxArray *val) { - data[idx] = maybe_unmark_array (val); + if (idx >= 0 && idx < get_number_of_elements ()) + data[idx] = maybe_unmark_array (val); } // ------------------------------------------------------------------