changeset 6622:ed18a7a15cac octave-forge

undo last change, provide better solution
author highegg
date Thu, 28 Jan 2010 20:25:13 +0000
parents 093c07d22b33
children 0523b73762db
files main/general/inst/@dict/dict.m main/general/inst/@dict/join.m main/general/inst/@dict/struct.m main/general/inst/@dict/subsasgn.m
diffstat 4 files changed, 16 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/main/general/inst/@dict/dict.m	Thu Jan 28 15:40:42 2010 +0000
+++ b/main/general/inst/@dict/dict.m	Thu Jan 28 20:25:13 2010 +0000
@@ -57,24 +57,24 @@
 function d = dict (keys, values)
 
   if (nargin == 0)
-    keys = values = {};
+    keys = values = cell (0, 1);
   elseif (nargin == 1)
     if (iscellstr (keys))
-      keys = sort (keys(:).');
+      keys = sort (keys(:));
       values = cell (numel (keys), 1);
     elseif (isstruct (keys))
-      values = struct2cell (keys)(:,:).';
-      if (rows (values) != 1)
+      values = struct2cell (keys)(:,:);
+      if (columns (values) != 1)
         error ("dict: structure must be a scalar");
       endif
-      [keys, ind] = sort (fieldnames (keys).');
+      [keys, ind] = sort (fieldnames (keys));
       values = values(ind);        
     else
       error ("dict: keys must be a cell vector of strings");
     endif
   elseif (nargin == 2)
-    [keys, idx] = sort (keys(:).');
-    values = values (idx)(:).';
+    [keys, idx] = sort (keys(:));
+    values = values (idx)(:);
   else
     print_usage ();
   endif
--- a/main/general/inst/@dict/join.m	Thu Jan 28 15:40:42 2010 +0000
+++ b/main/general/inst/@dict/join.m	Thu Jan 28 20:25:13 2010 +0000
@@ -30,8 +30,8 @@
   keys1 = d1.keys;
   keys2 = d2.keys;
 
-  [keys, idx] = sort ([keys1, keys2]);
-  values = [d1.values, d2.values](idx);
+  [keys, idx] = sort ([keys1; keys2]);
+  values = [d1.values; d2.values](idx);
   n = numel (keys);
 
   if (n > 1)
--- a/main/general/inst/@dict/struct.m	Thu Jan 28 15:40:42 2010 +0000
+++ b/main/general/inst/@dict/struct.m	Thu Jan 28 20:25:13 2010 +0000
@@ -26,7 +26,7 @@
   keys = d.keys;
   valid = cellfun (@isvarname, keys);
   if (all (valid))
-    s = cell2struct (d.values, keys, 2);
+    s = cell2struct (d.values, keys, 3);
   else
     error ("struct: invalid key value: %s", keys{find (! valid, 1)});
   endif
--- a/main/general/inst/@dict/subsasgn.m	Thu Jan 28 15:40:42 2010 +0000
+++ b/main/general/inst/@dict/subsasgn.m	Thu Jan 28 20:25:13 2010 +0000
@@ -52,9 +52,9 @@
           endif
           ## Look up the proper place to insert the new key.
           i = lookup (d.keys, ind);
-          d.keys = [d.keys(1:i), {ind}, d.keys(i+1:end)];
+          d.keys = [d.keys(1:i,1); {ind}; d.keys(i+1:end)];
           ## Insert value.
-          d.values = [d.values(1:i), {val}, d.values(i+1:end)];
+          d.values = [d.values(1:i,1); {val}; d.values(i+1:end,1)];
         endif
       elseif (iscellstr (ind))
         ## Multiple assignment case. Perform checks.
@@ -73,8 +73,6 @@
           elseif (numel (ind) != numel (val))
             error ("numbers of elements of index and rhs must match");
           endif
-          val = val(:).';
-          ind = ind(:).';
           ## Choose from two paths.
           if (numel (ind) < numel (d.keys))
             ## Scarce assignment. There's a good chance that all keys will be present.
@@ -85,14 +83,14 @@
             else
               d.values(i(mask)) = val(mask);
               mask = !mask;
-              [d.keys, i] = sort ([d.keys, ind(mask)]);
-              d.values = [d.values, val(mask)](i);
+              [d.keys, i] = sort ([d.keys; ind(mask)(:)]);
+              d.values = [d.values; val(mask)(:)](i);
             endif
           else
             ## Mass assignment. Probably most of the keys are new ones, so simply
             ## melt all together.
-            [d.keys, i] = unique ([d.keys, ind]);
-            d.values = [d.values, val](i);
+            [d.keys, i] = unique ([d.keys; ind(:)]);
+            d.values = [d.values; val(:)](i);
           endif
         else
           error ("expected cell rhs for cell index");