diff general/options.m @ 37:beb8a3f4a345

Renamed prefs to options throughout.
author samer
date Mon, 28 Jan 2013 10:52:11 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/general/options.m	Mon Jan 28 10:52:11 2013 +0000
@@ -0,0 +1,40 @@
+% options - create name-value map as a structure
+%
+% Arguments can be name value pairs, eg
+%   opts=options('foo',5,'bar',7)
+%   opts.foo=4
+%   opts.bar=7
+%
+% Or structures
+%   opts=options(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=options('foo',5,varargin{:});
+%   fooness=opts.foo;
+%   barness=getparam(opts,'bar',12);
+%
+% See also: GETPARAM, GETFIELD, ISFIELD
+function P=options(varargin)
+
+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
+