X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=octave_packages%2Fgeneral-1.3.1%2F%40dict%2Fsubsref.m;fp=octave_packages%2Fgeneral-1.3.1%2F%40dict%2Fsubsref.m;h=fe0cfc2cac43be739c62a4e04e62c950dea4ab79;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hp=0000000000000000000000000000000000000000;hpb=1705066eceaaea976f010f669ce8e972f3734b05;p=CreaPhase.git
diff --git a/octave_packages/general-1.3.1/@dict/subsref.m b/octave_packages/general-1.3.1/@dict/subsref.m
new file mode 100644
index 0000000..fe0cfc2
--- /dev/null
+++ b/octave_packages/general-1.3.1/@dict/subsref.m
@@ -0,0 +1,73 @@
+## Copyright (C) 2009 VZLU Prague, a.s., Czech Republic
+##
+## This program is free software; you can redistribute it and/or modify it under
+## the terms of the GNU General Public License as published by the Free Software
+## Foundation; either version 3 of the License, or (at your option) any later
+## version.
+##
+## This program is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+## details.
+##
+## You should have received a copy of the GNU General Public License along with
+## this program; if not, see .
+
+## -*- texinfo -*-
+## @deftypefn{Function File} {d =} subsref (d, s)
+## Overloaded subsref for dictionaries.
+## @end deftypefn
+
+## Author: Jaroslav Hajek
+
+function varargout = subsref (d, s)
+ if (isempty (s))
+ error ("dict: missing index");
+ endif
+
+ switch (s(1).type)
+ case "()"
+ ind = s(1).subs;
+ if (numel (ind) == 1)
+ ind = ind{1};
+ else
+ error ("dict: needs exactly one index");
+ endif
+ if (ischar (ind))
+ i = lookup (d.keys, ind, "m");
+ if (i)
+ e = d.values {i};
+ else
+ error ("key does not exist: %s", ind);
+ endif
+ elseif (iscellstr (ind))
+ i = lookup (d.keys, ind, "m");
+ if (all (i(:)))
+ e = reshape (d.values (i), size (ind)); # ensure correct shape.
+ else
+ ## Report the first non-existing key.
+ error ("key does not exist: %s", ind{find (i == 0, 1)});
+ endif
+ else
+ error ("invalid index");
+ endif
+ case "."
+ fld = s.subs;
+ switch (fld)
+ case 'keys'
+ e = d.keys;
+ case 'values'
+ e = d.values;
+ otherwise
+ error ("@dict/subsref: invalid property \"%s\"", fld);
+ endswitch
+ otherwise
+ error ("invalid subscript type");
+ endswitch
+
+ if (numel (s) > 1)
+ varargout = {subsref(e, s(2:end))};
+ else
+ varargout = {e};
+ endif
+endfunction