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	Thu Apr 05 16:09:03 2007 +0000
+++ b/src/ChangeLog	Thu Apr 05 16:18:21 2007 +0000
@@ -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	Thu Apr 05 16:09:03 2007 +0000
+++ b/src/DLD-FUNCTIONS/regexp.cc	Thu Apr 05 16:18:21 2007 +0000
@@ -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)