samer@2: % timed_action - return action function that checks the time samer@2: % samer@2: % timed_action :: samer@2: % (A1, A2, ... => B1, B2, ...) ~'some action', samer@6: % options { samer@6: % print :: bool/false ~'if true, then print timing error on action'; samer@6: % errorfn :: (time => real) ~'action to compute timing error from scheduled time' samer@6: % } samer@2: % -> timed_action({A1,A2,...},{B1,B2,...}). samer@2: function a0=timed_action(x,varargin) samer@37: opts=options('print',0,'errorfn',@(t)nows-t,varargin{:}); samer@2: if opts.print, a0=@aa_print; else a0=@aa; end samer@2: errfn=opts.errorfn; samer@0: samer@2: function varargout=aa_print(t0,varargin), samer@2: varargout{1}=errfn(t0); samer@2: [varargout{2:nargout}]=x(varargin{:}); samer@2: fprintf('timed_action: error=%g\n',varargout{1}); samer@2: end samer@2: function varargout=aa(t0,varargin), samer@2: varargout{1}=errfn(t0); samer@2: [varargout{2:nargout}]=x(varargin{:}); samer@0: end samer@0: end