diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/general/funutils/@function_handle/table.m	Tue Jan 29 15:59:01 2013 +0000
@@ -0,0 +1,39 @@
+function [g,s,l,seq]=table(f,varargin)
+	opts=options('nargin',nargin(f),'nargout',nargout(f),'file',[],varargin{:});
+	nin=opts.nargin;
+	nout=opts.nargout;
+
+	Table=cell(0,nin+nout);
+
+	g=@lookup;
+	s=@saver;
+	l=@loader;
+	seq=@getrows;
+ 
+	function s=getrows, s=slices(Table,1); end
+	function saver(file), 
+		if nargin<1, file=opts.file; end
+		fprintf('saving %d tabled rows of %s to %s\n',size(Table,1),tostring(f),file);
+		d.table=Table;
+		save(file,'-struct','d'); 
+	end
+	function loader(file), 
+		if nargin<1, file=opts.file; end
+		d=load(file);
+		Table=d.table;
+		fprintf('loading %d tabled rows of %s from %s\n',size(Table,1),tostring(f),file);
+	end
+
+	function varargout=lookup(varargin)
+		matches=select(@(r)isequal(varargin,r(1:nin)),slices(Table,1));
+		if isempty(matches)
+			[varargout{1:nout}]=f(varargin{:});
+			Table=vertcat(Table,[varargin,varargout]);
+		else
+			varargout=col(head(matches),nin+(1:nout));
+		end
+	end
+end
+
+
+