class ConcurrentQ {

	public void offer(Iterator<I> iterator) throws InterruptedException {
		lock.lockInterruptibly();
		try {

			while (iterator.hasNext()) {
				I next = iterator.next();

				if (!queue.offer(next)) {
					// must be full...wait until space is available
					tracker.waitForNext();
					queue.offer(next);
				}

				tracker.itemsAdded(1);
				fillOpenProcessingSlots();
			}
		}
		finally {
			lock.unlock();
		}
	}

	public  ConcurrentQ(String name, QCallback<I, R> callback);
	public  ConcurrentQ(QCallback<I, R> callback, Queue<I> queue, GThreadPool threadPool,
			QItemListener<I, R> listener, boolean collectResults, int maxInProgress,
			boolean jobsReportProgress);

}