System.out.println("Firing a joiner");
    private void fireMe(FlatNode fire, SimulationCounter counters, HashMap executionCounts)     {	if (fire.contents instanceof SIRFilter) {	    //decrement the schedule execution counter	    int oldVal = ((Integer)executionCounts.get(fire)).intValue();	    if (oldVal - 1 < 0)		Utils.fail("Executed too much");	    executionCounts.put(fire, new Integer(oldVal - 1));	    	    //take the values off the buffer	    //take off peek values on the first invocation	    if (!counters.hasFired(fire))		counters.decrementBufferCount(fire, 					      ((SIRFilter)fire.contents).					      getPeekInt());	    else 		counters.decrementBufferCount(fire, 					      ((SIRFilter)fire.contents).					      getPopInt());	    	    //now this node has fired	    counters.setFired(fire);	}	else if (fire.contents instanceof SIRJoiner) {	    System.out.println("Firing a joiner");	    	    JoinerScheduleNode previous = 		(JoinerScheduleNode)currentJoinerCode.get(fire);	    JoinerScheduleNode current = new JoinerScheduleNode();	    current.buffer = counters.getJoinerBuffer(fire);	    current.type = JoinerScheduleNode.FIRE;	    previous.next = current;	    //set current	    currentJoinerCode.put(fire, current);	    //decrement the buffer	    counters.decrementJoinerBufferCount(fire, counters.getJoinerBuffer(fire));	    //step the schedule	    counters.incrementJoinerSchedule(fire);	}    }