Mercurial > hg > ishara
comparison general/funutils/@function_handle/table.m @ 38:9d24b616bb06
Added function algebra.
author | samer |
---|---|
date | Tue, 29 Jan 2013 15:59:01 +0000 |
parents | |
children | ae596261e75f |
comparison
equal
deleted
inserted
replaced
37:beb8a3f4a345 | 38:9d24b616bb06 |
---|---|
1 function [g,s,l,seq]=table(f,varargin) | |
2 opts=options('nargin',nargin(f),'nargout',nargout(f),'file',[],varargin{:}); | |
3 nin=opts.nargin; | |
4 nout=opts.nargout; | |
5 | |
6 Table=cell(0,nin+nout); | |
7 | |
8 g=@lookup; | |
9 s=@saver; | |
10 l=@loader; | |
11 seq=@getrows; | |
12 | |
13 function s=getrows, s=slices(Table,1); end | |
14 function saver(file), | |
15 if nargin<1, file=opts.file; end | |
16 fprintf('saving %d tabled rows of %s to %s\n',size(Table,1),tostring(f),file); | |
17 d.table=Table; | |
18 save(file,'-struct','d'); | |
19 end | |
20 function loader(file), | |
21 if nargin<1, file=opts.file; end | |
22 d=load(file); | |
23 Table=d.table; | |
24 fprintf('loading %d tabled rows of %s from %s\n',size(Table,1),tostring(f),file); | |
25 end | |
26 | |
27 function varargout=lookup(varargin) | |
28 matches=select(@(r)isequal(varargin,r(1:nin)),slices(Table,1)); | |
29 if isempty(matches) | |
30 [varargout{1:nout}]=f(varargin{:}); | |
31 Table=vertcat(Table,[varargin,varargout]); | |
32 else | |
33 varargout=col(head(matches),nin+(1:nout)); | |
34 end | |
35 end | |
36 end | |
37 | |
38 | |
39 |