annotate general/disposables.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents ae596261e75f
children
rev   line source
samer@4 1 % disposables - Manage resources that need to be disposed of cleanly
samer@4 2 %
samer@4 3 % This is implemented as a message handler to be used as follows:
samer@4 4 %
samer@4 5 % >> ref=disposables('reg',x) % register x as a disposable returning reference ref
samer@4 6 % >> disposables('dereg',ref) % deregister (but do not dispose) of registered object
samer@4 7 % >> dx=disposables('get') % get cell array of all registered objects
samer@4 8 % >> disposables('dispose') % dispose of and deregister all disposables
samer@4 9 %
samer@4 10 % In most cases, you will not need to use this function as resources should
samer@4 11 % be disposed of correctly by the functions that acquire them. However, if
samer@4 12 % things go wrong or the user presses Ctrl-C, some objects might not be
samer@4 13 % disposed of properly and cause problems later. In this case, a call to
samer@4 14 % disposables('dispose') should take care of it.
samer@4 15
samer@4 16 function varargout=disposables(msg,varargin)
samer@4 17 persistent registry
samer@4 18
samer@4 19 switch(msg)
samer@4 20 case 'reg',
samer@4 21 obj=varargin{1};
samer@4 22 registry = [registry, obj];
samer@4 23 varargout{1}=obj;
samer@4 24 case 'dereg',
samer@4 25 obj=varargin{1};
samer@42 26 if ~isempty(registry)
samer@42 27 idx=find(registry==obj);
samer@42 28 registry=registry([1:idx-1,idx+1:length(registry)]);
samer@42 29 end
samer@4 30 case 'get'
samer@4 31 varargout{1}=registry;
samer@4 32 case 'dispose'
samer@4 33 for i=1:length(registry)
samer@4 34 registry(i).dispose();
samer@4 35 end
samer@4 36 registry=[];
samer@4 37 end
samer@4 38 end
samer@4 39