Mercurial > hg > octave-lojdl
changeset 6495:fd09c7e8c4c9
[project @ 2007-04-05 16:18:20 by dbateman]
author | dbateman |
---|---|
date | Thu, 05 Apr 2007 16:18:21 +0000 |
parents | 76a1a953533d |
children | e0acfe7c3f7b |
files | src/ChangeLog src/DLD-FUNCTIONS/regexp.cc |
diffstat | 2 files changed, 33 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2007-04-05 David Bateman <dbateman@free.fr> + + * DLD-FUNCTIONS/regexp.cc (Fregexprep): Correct iteration over + cell arrays so that the source and pattern are iterated seperately + in the same manner as matlab. + 2007-04-05 Laurent Mazet <laurent.mazet@motorola.com> * mex.cc (mxArray_octave_value::get_string): Copy nel elements,
--- a/src/DLD-FUNCTIONS/regexp.cc +++ b/src/DLD-FUNCTIONS/regexp.cc @@ -1446,7 +1446,8 @@ Cell str; Cell pat; Cell rep; - dim_vector dv(1,1); + dim_vector dv0; + dim_vector dv1(1,1); if (args(0).is_cell()) str = args(0).cell_value(); @@ -1463,47 +1464,44 @@ else rep = Cell (args(2)); - if (str.numel() != 1) + dv0 = str.dims(); + if (pat.numel() != 1) { - dv = str.dims(); - if ((pat.numel() != 1 && dv != pat.dims()) || - (rep.numel() != 1 && dv != rep.dims())) - error ("regexprep: Inconsistent cell array dimensions"); - } - else if (pat.numel() != 1) - { - dv = pat.dims(); - if ((pat.numel() != 1 && dv != pat.dims()) || - (rep.numel() != 1 && dv != rep.dims())) + dv1 = pat.dims(); + if (rep.numel() != 1 && dv1 != rep.dims()) error ("regexprep: Inconsistent cell array dimensions"); } else if (rep.numel() != 1) - dv = rep.dims(); + dv1 = rep.dims(); if (!error_state) { - Cell ret (dv); + Cell ret (dv0); octave_value_list new_args = args; - if (str.numel() == 1) - new_args(0) = str(0); - if (pat.numel() == 1) - new_args(1) = pat(0); - if (rep.numel() == 1) - new_args(2) = rep(0); + for (octave_idx_type i = 0; i < dv0.numel(); i++) + { + new_args(0) = str(i); + if (pat.numel() == 1) + new_args(1) = pat(0); + if (rep.numel() == 1) + new_args(2) = rep(0); + for (octave_idx_type j = 0; j < dv1.numel(); j++) + { + if (pat.numel() != 1) + new_args(1) = pat(j); + if (rep.numel() != 1) + new_args(2) = rep(j); + new_args(0) = octregexprep (new_args, "regexprep"); - for (octave_idx_type i = 0; i < dv.numel(); i++) - { - if (str.numel() != 1) - new_args(0) = str(i); - if (pat.numel() != 1) - new_args(1) = pat(i); - if (rep.numel() != 1) - new_args(2) = rep(i); - ret(i) = octregexprep (new_args, "regexprep"); + if (error_state) + break; + } if (error_state) break; + + ret(i) = new_args(0); } if (!error_state)