samer@0
|
1 % construct - construct unit for serial connection of two arrows
|
samer@0
|
2 function u=construct(o,sizes_in)
|
samer@0
|
3 u1=[]; u2=[];
|
samer@0
|
4 try
|
samer@0
|
5 u1=construct(o.unit1,sizes_in);
|
samer@0
|
6 u2=construct(o.unit2,u1.sizes_out);
|
samer@0
|
7 n_int=nargout(o.unit1);
|
samer@0
|
8 n_out=nargout(o.unit2);
|
samer@0
|
9 catch ex
|
samer@0
|
10 if ~isempty(u2), u2.dispose(); end
|
samer@0
|
11 if ~isempty(u1), u1.dispose(); end
|
samer@0
|
12 rethrow(ex);
|
samer@0
|
13 end
|
samer@0
|
14
|
samer@0
|
15
|
samer@0
|
16 u=mkunit(o);
|
samer@0
|
17 u.starting= @starting;
|
samer@0
|
18 u.stopping= @stopping;
|
samer@0
|
19 u.dispose = @dispose;
|
samer@0
|
20 if n_int==1
|
samer@0
|
21 if n_out==1
|
samer@0
|
22 if nargin(o.unit1)==1
|
samer@0
|
23 u.process = @proc_111;
|
samer@0
|
24 else
|
samer@0
|
25 u.process = @proc_n11;
|
samer@0
|
26 end
|
samer@0
|
27 else
|
samer@0
|
28 if nargin(o.unit1)==1
|
samer@0
|
29 u.process = @proc_11n;
|
samer@0
|
30 else
|
samer@0
|
31 u.process = @proc_n1n;
|
samer@0
|
32 end
|
samer@0
|
33 end
|
samer@0
|
34 else
|
samer@0
|
35 if nargin(o.unit1)==1 && n_out==1
|
samer@0
|
36 u.process = @proc_1n1;
|
samer@0
|
37 else
|
samer@0
|
38 u.process = @proc_val;
|
samer@0
|
39 end
|
samer@0
|
40 end
|
samer@0
|
41 u.get_state = @get_state;
|
samer@0
|
42 u.set_state = @set_state;
|
samer@0
|
43 u.sizes_out = u2.sizes_out;
|
samer@0
|
44 u.viewables = [u1.viewables;u2.viewables];
|
samer@0
|
45
|
samer@0
|
46 function y=proc_111(x), y=u2.process(u1.process(x)); end
|
samer@0
|
47 function y=proc_n11(varargin), y=u2.process(u1.process(varargin{:})); end
|
samer@0
|
48 function varargout=proc_11n(x), [varargout{1:n_out}]=u2.process(u1.process(x)); end
|
samer@0
|
49 function varargout=proc_n1n(varargin)
|
samer@0
|
50 [varargout{1:n_out}] = u2.process(u1.process(varargin{:}));
|
samer@0
|
51 end
|
samer@0
|
52
|
samer@0
|
53 function y=proc_1n1(x)
|
samer@0
|
54 [tempvals{1:n_int}] = u1.process(x);
|
samer@0
|
55 y=u2.process(tempvals{:});
|
samer@0
|
56 end
|
samer@0
|
57
|
samer@0
|
58 function varargout=proc_val(varargin)
|
samer@0
|
59 [tempvals{1:n_int}] = u1.process(varargin{:});
|
samer@0
|
60 [varargout{1:n_out}] = u2.process(tempvals{:});
|
samer@0
|
61 end
|
samer@0
|
62
|
samer@0
|
63
|
samer@0
|
64 function dispose, u1.dispose(); u2.dispose(); end
|
samer@0
|
65 function starting, u1.starting(); u2.starting(); end
|
samer@0
|
66 function stopping, u1.stopping(); u2.stopping(); end
|
samer@0
|
67
|
samer@0
|
68 function s=get_state, s = {u1.get_state(),u2.get_state()}; end
|
samer@0
|
69 function set_state(s), u1.set_state(s{1}); u2.set_state(s{2}); end
|
samer@0
|
70 end
|