samer@0
|
1 function u=construct(s,sizes_in)
|
samer@0
|
2
|
samer@0
|
3 nin1=nargin(s.a1);
|
samer@0
|
4 nin2=nargin(s.a2);
|
samer@0
|
5
|
samer@0
|
6 u1=[]; u2=[];
|
samer@0
|
7 try
|
samer@0
|
8 u1=construct(s.a1,sizes_in(1:nin1));
|
samer@0
|
9 u2=construct(s.a2,sizes_in(nin1+(1:nin2)));
|
samer@0
|
10
|
samer@0
|
11 u.sizes_out = [u1.sizes_out,u2.sizes_out];
|
samer@0
|
12
|
samer@0
|
13 nout1=length(u1.sizes_out);
|
samer@0
|
14 nout2=length(u2.sizes_out);
|
samer@0
|
15
|
samer@0
|
16 ix1 = 1:nin1; ix2 = nin1+(1:nin2);
|
samer@0
|
17 ox1 = 1:nout1; ox2 = nout1+(1:nout2);
|
samer@0
|
18
|
samer@0
|
19 nout = length(u.sizes_out);
|
samer@0
|
20 if all([nin1,nin2,nout1,nout2]==[1,1,1,1]),
|
samer@0
|
21 u.process = @proc11;
|
samer@0
|
22 else
|
samer@0
|
23 u.process = @proc;
|
samer@0
|
24 end
|
samer@0
|
25 catch ex
|
samer@0
|
26 if ~isempty(u2), u2.dispose(); end
|
samer@0
|
27 if ~isempty(u1), u1.dispose(); end
|
samer@0
|
28 rethrow(ex);
|
samer@0
|
29 end
|
samer@0
|
30
|
samer@0
|
31 u.dispose = @dispose;
|
samer@0
|
32 u.starting= @starting;
|
samer@0
|
33 u.stopping= @starting;
|
samer@0
|
34 u.dispose = @dispose;
|
samer@0
|
35 u.get_state = @get_state;
|
samer@0
|
36 u.set_state = @set_state;
|
samer@0
|
37 u.viewables = [u1.viewables;u2.viewables];
|
samer@0
|
38
|
samer@0
|
39 function [y1,y2]=proc11(x1,x2)
|
samer@0
|
40 y1=u1.process(x1);
|
samer@0
|
41 y2=u2.process(x2);
|
samer@0
|
42 end
|
samer@0
|
43
|
samer@0
|
44 function varargout=proc(varargin)
|
samer@0
|
45 varargout=cell(1,nout);
|
samer@0
|
46 [varargout{ox1}]=u1.process(varargin{ix1});
|
samer@0
|
47 [varargout{ox2}]=u2.process(varargin{ix2});
|
samer@0
|
48 end
|
samer@0
|
49
|
samer@0
|
50 function dispose, u1.dispose(); u2.dispose(); end
|
samer@0
|
51 function starting, u1.starting(); u2.starting(); end
|
samer@0
|
52 function stopping, u1.stopping(); u2.stopping(); end
|
samer@0
|
53
|
samer@0
|
54 function s=get_state, s = {u1.get_state(),u2.get_state()}; end
|
samer@0
|
55 function set_state(s), u1.set_state(s{1}); u2.set_state(s{2}); end
|
samer@0
|
56 end
|
samer@0
|
57
|