System.out.println("Linear filter found: " + self +
LinearPrinter.println("Linear filter found: " + self +
    public void visitFilter(SIRFilter self, SIRFilterIter iter) {	System.out.println("Visiting " + "(" + self + ")");	// set up the visitor that will actually collect the data	int peekRate = extractInteger(self.getPeek());	int pushRate = extractInteger(self.getPush());	System.out.println("  Peek rate: " + peekRate);	System.out.println("  Push rate: " + pushRate);	// if we have a peek or push rate of zero, this isn't a linear filter that we care about,	// so only try and visit the filter if both are non-zero	if ((peekRate != 0) && (pushRate != 0)) {	    LinearFilterVisitor theVisitor = new LinearFilterVisitor(peekRate, pushRate);	    // pump the visitor through the work function	    // (we might need to send it thought the init function as well so that	    //  we can determine the initial values of fields. However, I think that	    //  field prop is supposed to take care of this.)	    self.getWork().accept(theVisitor);	    // print out the results of pumping the visitor	    if (theVisitor.computesLinearFunction()) {		System.out.println("Linear filter found: " + self +				   "\n-->Matrix:\n" + theVisitor.getMatrixRepresentation() +				   "\n-->Constant Vector:" + theVisitor.getConstantVector());	    }			} else {	    System.out.println("  " + self.getIdent() + " is source/sink.");	}    }