function u=construct(s,sizes_in)
	nout=nargout(s);
	u=mkunit(s);
	h=s.h(sizes_in);

	procs = { @proc00, @proc01, @proc0n; ...
	          @proc10, @proc11, @proc11; ...
				 @procn0, @procn1, @procnn };

	u.sizes_out = s.sizefn(sizes_in);
	u.process   = procs{ n2i(nargin(s)), n2i(nargout(s)) };
	u.dispose   = @()release(h);

	function i=n2i(n), i=1+max(n,2); end
	function proc00(in), step(h); end
	function proc10(in), step(h,in); end
	function proc01(in), out=step(h); end
	function out=proc11(in), out=step(h,in); end

	function procn0(varargin), step(h,varargin{:}); end
	function out=procn1(varargin), out=step(h,varargin{:}); end
	function varargout=proc0n, [varargout{1:nout}]=step(h); end
	function varargout=proc1n(in), [varargout{1:nout}]=step(h,in); end

	function varargout=procnn(varargin), [varargout{1:nout}]=step(h,varargin{:}); end
end

