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@38
|
28 matches=select(@(r)isequal(varargin,r(1:nin)),slices(Table,1));
|
samer@38
|
29 if isempty(matches)
|
samer@38
|
30 [varargout{1:nout}]=f(varargin{:});
|
samer@38
|
31 Table=vertcat(Table,[varargin,varargout]);
|
samer@38
|
32 else
|
samer@38
|
33 varargout=col(head(matches),nin+(1:nout));
|
samer@38
|
34 end
|
samer@38
|
35 end
|
samer@38
|
36 end
|
samer@38
|
37
|
samer@38
|
38
|
samer@38
|
39
|