samer@38: function [g,s,l,seq]=table(f,varargin) samer@38: opts=options('nargin',nargin(f),'nargout',nargout(f),'file',[],varargin{:}); samer@38: nin=opts.nargin; samer@38: nout=opts.nargout; samer@38: samer@38: Table=cell(0,nin+nout); samer@38: samer@38: g=@lookup; samer@38: s=@saver; samer@38: l=@loader; samer@38: seq=@getrows; samer@38: samer@38: function s=getrows, s=slices(Table,1); end samer@38: function saver(file), samer@38: if nargin<1, file=opts.file; end samer@38: fprintf('saving %d tabled rows of %s to %s\n',size(Table,1),tostring(f),file); samer@38: d.table=Table; samer@38: save(file,'-struct','d'); samer@38: end samer@38: function loader(file), samer@38: if nargin<1, file=opts.file; end samer@38: d=load(file); samer@38: Table=d.table; samer@38: fprintf('loading %d tabled rows of %s from %s\n',size(Table,1),tostring(f),file); samer@38: end samer@38: samer@38: function varargout=lookup(varargin) samer@42: for i=1:size(Table,1) samer@42: if isequal(varargin,Table(i,1:nin)), samer@42: varargout=Table(i,nin+(1:nout)); samer@42: return; samer@42: end samer@38: end samer@42: [varargout{1:nout}]=f(varargin{:}); samer@42: Table=vertcat(Table,[varargin,varargout]); samer@38: end samer@38: end samer@38: