" __buffer__[" + buffersize + "];\n");
" " + BUFFER + "[" + buffersize + "];\n");
    public void visitFilter(SIRFilter self,			    SIRFilterIter iter) {	if (self.getPeekInt() > 4 * self.getPopInt()) 	    circular = false;      	//System.out.println(self.getName());	//Entry point of the visitor	print("#include <raw.h>\n");	print("#include <math.h>\n\n");		//print the extern for the function to init the 	//switch	print("void raw_init();\n");	    	print("int __count__ = -1;\n");	if (filter.getPeekInt() > 0) {	    if (circular) {		if (filter instanceof SIRTwoStageFilter) {		    SIRTwoStageFilter two = (SIRTwoStageFilter)filter;		    int buffersize = (two.getInitPeek() > two.getPeekInt()) ? two.getInitPeek() :			two.getPeekInt();		    buffersize = nextPow2(buffersize + 1);		    print ("#define __BUFFERSIZE__ " + buffersize + "\n");		    print ("#define __BITS__ " + (buffersize - 1) + "\n");		    print(two.getInputType() + 			  " __buffer__[__BUFFERSIZE__];\n");		}		else{		    int buffersize = nextPow2(filter.getPeekInt());		    print ("#define __BUFFERSIZE__ " + buffersize + "\n");		    print ("#define __BITS__ " + (buffersize - 1) + "\n");		    print(filter.getInputType() + 			  " __buffer__[__BUFFERSIZE__];\n");		}	    }	    else {		if (filter instanceof SIRTwoStageFilter) {		    SIRTwoStageFilter two = (SIRTwoStageFilter)filter;		    int buffersize = (two.getInitPeek() > two.getPeekInt()) ? two.getInitPeek() :			two.getPeekInt();		    print(two.getInputType() + 			  " __buffer__[" + buffersize + "];\n");		}		else {		    print(filter.getInputType() + 			  " __buffer__[" + filter.getPeekInt() + "];\n");		}	    }	}	//Visit fields declared in the filter class	JFieldDeclaration[] fields = self.getFields();	for (int i = 0; i < fields.length; i++)	   fields[i].accept(this);		//visit methods of filter, print the declaration first	declOnly = true;	JMethodDeclaration[] methods = self.getMethods();	for (int i =0; i < methods.length; i++)	    methods[i].accept(this);	//now print the functions with body	declOnly = false;	for (int i =0; i < methods.length; i++) {	    methods[i].accept(this);		}		print("void begin(void) {\n");	print("  raw_init();\n");	print("  " + self.getInit().getName() + "(");	print(InitArgument.getInitArguments(self));	print (");\n");	if (self instanceof SIRTwoStageFilter) {	    print("  " + ((SIRTwoStageFilter)self).getInitWork().getName() + "();\n");	}	print("  " + self.getWork().getName() + "();\n");	print("}\n");		System.out.println("Code for " + self.getName() +			   " written to tile" + Layout.getTileNumber(self) +			   ".c");	try {	    FileWriter fw = new FileWriter("tile" + Layout.getTileNumber(self) + ".c");	    fw.write(str.toString());	    fw.close();	}	catch (Exception e) {	    System.err.println("Unable to write tile code file for filter " +			       self.getName());	}    }