docs: public <Value> MeasureListener<Value> wrapListener(
  			final MeasureListener<Value> wrapped) {
  		if (wrapped == null) {
  			throw new IllegalArgumentException("No listener provided");
  		} else {
  			@SuppressWarnings("unchecked")
  			MeasureListener<Value> wrapper = (MeasureListener<Value>) listenerCache
  					.get(wrapped);
  
  			if (wrapper == null) {
  				wrapper = new MeasureListener<Value>() {
  					@Override
  					public void measureGenerated(Value value) {
  						long start = System.currentTimeMillis();
  						wrapped.measureGenerated(value);
  						long stop = System.currentTimeMillis();
  						time += stop - Math.max(start, lastReset);
  					}
  				};
  				listenerCache.put(wrapped, wrapper);
  			} else {
  				// reuse existing one
  			}
  
  			return wrapper;
  		}
  	}