changeset 8594:756b0ba61350

orderfields.m: avoid loop for non-empty cases. New tests.
author Jason Riedy <jason@acm.org>
date Mon, 26 Jan 2009 22:43:29 -0500
parents 4e39b00218d3
children dee5d60257e4
files scripts/ChangeLog scripts/miscellaneous/orderfields.m
diffstat 2 files changed, 21 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog	Mon Jan 26 22:35:20 2009 -0500
+++ b/scripts/ChangeLog	Mon Jan 26 22:43:29 2009 -0500
@@ -1,3 +1,7 @@
+2009-01-26  Jason Riedy  <jason@acm.org>
+
+	* miscellaneous/orderfields.m: Also avoid loop for non-empty structs.
+
 2009-01-17  Jaroslav Hajek  <highegg@gmail.com>
 
 	* optimization/fsolve.m: Disable Broyden updates for sparse jacobians.
--- a/scripts/miscellaneous/orderfields.m	Mon Jan 26 22:35:20 2009 -0500
+++ b/scripts/miscellaneous/orderfields.m	Mon Jan 26 22:43:29 2009 -0500
@@ -87,16 +87,26 @@
   endif
 
   ## Permute the names in the structure.
+  args = cell (1, 2 * numel (names));
+  args(1:2:end) = names;
   if (numel (s1) == 0)
-    args = cell (1, 2 * numel (names));
-    args(1:2:end) = names;
     args(2:2:end) = {[]};
-    t = struct (args{:});
   else
-    for i = 1:numel (names)
-      el = names(i);
-      t(:).(el) = s1(:).(el);
-    endfor
+    args(2:2:end) = {s1.(names)};
   endif
+  t = struct (args{:});
 
 endfunction
+
+%!shared a, b
+%! a = struct ("foo", {1, 2}, "bar", {3, 4});
+%! b = struct ("bar", 6, "foo", 5);
+%!test
+%! a(2) = orderfields (b, a);
+%! assert (a(2).foo, 5)
+%!test
+%! a(2) = orderfields (b, [2 1]);
+%! assert (a(2).foo, 5)
+%!test
+%! a(2) = orderfields (b, fieldnames (a));
+%! assert (a(2).foo, 5)