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
|