samer@38
|
1 function [g,s,l,seq]=table(f,varargin)
|
samer@38
|
2 opts=options('nargin',nargin(f),'nargout',nargout(f),'file',[],varargin{:});
|
samer@38
|
3 nin=opts.nargin;
|
samer@38
|
4 nout=opts.nargout;
|
samer@38
|
5
|
samer@38
|
6 Table=cell(0,nin+nout);
|
samer@38
|
7
|
samer@38
|
8 g=@lookup;
|
samer@38
|
9 s=@saver;
|
samer@38
|
10 l=@loader;
|
samer@38
|
11 seq=@getrows;
|
samer@38
|
12
|
samer@38
|
13 function s=getrows, s=slices(Table,1); end
|
samer@38
|
14 function saver(file),
|
samer@38
|
15 if nargin<1, file=opts.file; end
|
samer@38
|
16 fprintf('saving %d tabled rows of %s to %s\n',size(Table,1),tostring(f),file);
|
samer@38
|
17 d.table=Table;
|
samer@38
|
18 save(file,'-struct','d');
|
samer@38
|
19 end
|
samer@38
|
20 function loader(file),
|
samer@38
|
21 if nargin<1, file=opts.file; end
|
samer@38
|
22 d=load(file);
|
samer@38
|
23 Table=d.table;
|
samer@38
|
24 fprintf('loading %d tabled rows of %s from %s\n',size(Table,1),tostring(f),file);
|
samer@38
|
25 end
|
samer@38
|
26
|
samer@38
|
27 function varargout=lookup(varargin)
|
samer@42
|
28 for i=1:size(Table,1)
|
samer@42
|
29 if isequal(varargin,Table(i,1:nin)),
|
samer@42
|
30 varargout=Table(i,nin+(1:nout));
|
samer@42
|
31 return;
|
samer@42
|
32 end
|
samer@38
|
33 end
|
samer@42
|
34 [varargout{1:nout}]=f(varargin{:});
|
samer@42
|
35 Table=vertcat(Table,[varargin,varargout]);
|
samer@38
|
36 end
|
samer@38
|
37 end
|
samer@38
|
38
|