public void pumpRunsFromDamage(final StyledRunConsumer consumer) {
		final int startRow = 0;
		final int endRow = height;
		final int startCol = 0;
		final int endCol = width;
		lock.lock();
		try{
			for(int row = startRow ; row < endRow ; row++ ){
				
				Style lastStyle = null;
				int beginRun = startCol;
				for(int col = startCol; col < endCol; col++ ){
					final int location = row * width + col;
					if(location < 0 || location > styleBuf.length ){
						logger.error("Requested out of bounds runs: pumpFromDamage");
						continue;
					}
					final Style cellStyle = styleBuf[ location ];
					final boolean isDamaged = damage.get(location);
					if(!isDamaged){
						if(lastStyle != null) 
							consumer.consumeRun(beginRun, row, lastStyle, buf, row * width + beginRun, col - beginRun);
						beginRun = col;
						lastStyle = null;
					}else if(lastStyle == null){
						//begin damaged run
						lastStyle = cellStyle;
					}else if(!cellStyle.equals(lastStyle)){ 
						//start of new run
						consumer.consumeRun(beginRun, row, lastStyle, buf, row * width + beginRun, col - beginRun);
						beginRun = col;
						lastStyle = cellStyle;
					}
				}
				//end row
				if(lastStyle != null)
					consumer.consumeRun(beginRun, row, lastStyle, buf, row * width + beginRun, endCol - beginRun);
			}
		}finally{
			lock.unlock();
		}
	}