public void transform(Iterable<T3> input, Transformer<T1, T2> transformer){
		if (input == null){
			return;
		}
		if(input instanceof Collection){
			output = new ArrayList<T2>(((Collection)input).size());
		} else {
			output = new ArrayList<T2>();			
		}
		for (T1 t1 : input){
			T2 newItem;
			try {
				if(t1 instanceof HasName){
					tags.add(((HasName)t1).getName());
				}
				newItem = transformer.transform(t1);
				if(null != newItem){
					output.add(newItem);
				}
			} catch (BufferFullException e) {
				break;
			} catch (Throwable e) {
				errors.add(e);
			}
		}
	}