annotate 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
rev   line source
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