rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
cache_function.m
Go to the documentation of this file.
1 function [varargout] = cache_function(func_ptr, varargin)
2 %function [varargout] = cache_function(func_ptr, varargin)
3 % simple caching of function call
4 % inputs are cached too!
5 
6 if isfield(varargin{end}, 'disable_caching') && varargin{end}.disable_caching
7  [varargout{1:nargout}] = func_ptr(varargin{:});
8  return
9 end
10 
11 func_str = func2str(func_ptr);
12 
13 cached_index = [];
14 
15 if cache('exist', func_str)
16  loaded = cache('load', func_str);
17  for i = 1:loaded.ncached
18  if isequal(loaded.inputs{i}, varargin)
19  cached_index = i;
20  end
21  end
22 end
23 
24 if ~isempty(cached_index)
25  varargout = loaded.outputs{cached_index};
26 else
27 
28  [varargout{1:nargout}] = func_ptr(varargin{:});
29 
30  if ~exist('loaded', 'var')
31  loaded = struct('ncached', 0, 'inputs', [], 'outputs', []);
32  end
33 
34  loaded.ncached = loaded.ncached + 1;
35  loaded.inputs{loaded.ncached} = varargin;
36  loaded.outputs{loaded.ncached} = varargout;
37  cache('save', func_str, loaded);
38 end
39 
40 end
41 
function varargout = cache_function(func_ptr, varargin)
simple caching of function call inputs are cached too!