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
+