src/main/java/com/googlecode/javaewah/IteratingBufferedRunningLengthWord.java
public long discharge(BitmapStorage container, long max) {
    	long index = 0;
    	while (true) {
    		if (index + getRunningLength() > max) {
    			final int offset = (int) (max - index);
    			container.addStreamOfEmptyWords(getRunningBit(), offset);
    			this.brlw.runningLength -= offset;
    			return max;
    		}
    		container.addStreamOfEmptyWords(getRunningBit(), getRunningLength());
    		index += getRunningLength();
    		if (getNumberOfLiteralWords() + index > max) {
    			final int offset =(int) (max - index);
    			writeLiteralWords(offset, container);
    			this.brlw.runningLength = 0;
    			this.brlw.numberOfLiteralWords -= offset;
    			this.literalWordStartPosition += offset;
    			return max;
    		}
    		writeLiteralWords(getNumberOfLiteralWords(), container);
    		index += getNumberOfLiteralWords();
    		if(!next()) break;
    	}
    	return index;
    }
public long discharge(BitmapStorage container, long max) {
    	long index = 0;
    	while (true) {
    		if (index + getRunningLength() > max) {
    			final int offset = (int) (max - index);
    			container.addStreamOfEmptyWords(getRunningBit(), offset);
    			this.brlw.runningLength -= offset;
    			return max;
    		}
    		container.addStreamOfEmptyWords(getRunningBit(), getRunningLength());
    		index += getRunningLength();
    		if (getNumberOfLiteralWords() + index > max) {
    			final int offset =(int) (max - index);
    			writeLiteralWords(offset, container);
    			this.brlw.runningLength = 0;
    			this.brlw.numberOfLiteralWords -= offset;
    			this.literalWordStartPosition += offset;
    			return max;
    		}
    		writeLiteralWords(getNumberOfLiteralWords(), container);
    		index += getNumberOfLiteralWords();
    		if(!next()) break;
    	}
    	return index;
    }
Write out up to max words, returns how many were written

@param container target for writes
@param max       maximal number of writes
@return how many written