if (src.contents instanceof SIRTwoStageFilter) { SIRTwoStageFilter f = (SIRTwoStageFilter)src.contents; remaining += f.getInitPushInt();   }
    static private int leftoveritems (FlatNode src, FlatNode dst) {       if (src == null || dst == null) return 0;       int remaining;       if (dst.isFilter())        remaining = leftoveritemsFilter(src,dst);       else if (dst.isSplitter()) remaining = leftoveritemsSplitter(src,dst);       else if (dst.isJoiner())   remaining = leftoveritemsJoiner(src,dst);       else {assert false; remaining = -1;}              // If src is a two-stage filter then its pre-work function is executed once       // after init but before work.  The execution of a pre-work function may       // increase or decrease number of remaining items for the dst's work (or pre-work).       // Since we are looking for the worst case excess after init or after pre-work,       // we only care if pre-work increases the number of remaining items.       if (src.contents instanceof SIRTwoStageFilter) {           SIRTwoStageFilter f = (SIRTwoStageFilter)src.contents;           remaining += f.getInitPushInt();           // this is a safe overestimate.  In fact, dst may consume some items           // before src pushes these items.       }       return remaining;    }