}); this.add(new Identity()); this.setJoiner(ROUND_ROBIN()); }});
}); add(new Identity()); setJoiner(ROUND_ROBIN()); }});
    public void init(final int N, final int W) {	this.add(new SplitJoin() {		public void init() {		    this.setSplitter(WEIGHTED_ROUND_ROBIN(N, N));		    this.add(new Filter() {			    Channel input = new Channel(Float.TYPE, 1);			    Channel output = new Channel(Float.TYPE, 1);			    float weights[] = new float[W];			    int curr;			    public void init() {				for (int i=0; i<W; i++)				    weights[i] = calcWeight(i, N, W);				curr = 0;			    }			    public void initIO() {				this.streamInput = input;				this.streamOutput = output;			    }			    private float calcWeight(int a, int b, int c) {				return 1;			    }			    public void work() {				output.pushFloat(input.popFloat()*						 weights[curr++]);				if(curr>= W) curr = 0;			    }			});		    this.add(new Identity());		    this.setJoiner(ROUND_ROBIN());		}});	this.add(new SplitJoin() {		public void init() {		    this.setSplitter(DUPLICATE());		    this.add(new Filter() {   			    Channel input = new Channel(Float.TYPE, 2);			    Channel output = new Channel(Float.TYPE, 1);			    public void work() {				output.pushFloat(input.popFloat() - 						 input.popFloat());			    }			});		    this.add(new Filter() {   			    Channel input = new Channel(Float.TYPE, 2);			    Channel output = new Channel(Float.TYPE, 1);			    public void work() {				output.pushFloat(input.popFloat() + 						 input.popFloat());			    }			});		    setJoiner(WEIGHTED_ROUND_ROBIN(N, N));		}});    }}