Mercurial > hg > ishara
diff general/prefs.m @ 4:e44f49929e56
Adding reorganised general toolbox, now in several subdirectories.
author | samer |
---|---|
date | Sat, 12 Jan 2013 19:21:22 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/general/prefs.m Sat Jan 12 19:21:22 2013 +0000 @@ -0,0 +1,41 @@ +function P=prefs(varargin) +% prefs - manage name-value map as a structure +% Values can be retreived with defaults using GETPARAM +% +% Arguments can be name value pairs, eg +% opts=prefs('foo',5,'bar',7) +% opts.foo=4 +% opts.bar=7 +% +% Or structures +% opts=prefs(defopts,'foo',5) +% +% Later arguments override earlier ones. A typical usage is +% with variable argument lists and GETPARAM, eg +% +% function somefun(a,b,varargin) +% ... +% opts=prefs('foo',5,varargin{:}); +% fooness=opts.foo; +% barness=getparam(opts,'bar',12); +% +% See also: GETPARAM, GETFIELD, ISFIELD + +P=struct; +n=1; +while n<=length(varargin) + arg=varargin{n}; + if isstruct(arg) + P=cpfields(fieldnames(arg),arg,P); + elseif iscell(arg) + pairs=arg; + for k=1:length(pairs) + P=setfield(P,pairs{k}{1},pairs{k}{2}); + end + else + P=setfield(P,varargin{n},varargin{n+1}); + n=n+1; + end + n=n+1; +end +