package edu.stanford.nlp.util.concurrent;

/**
 * Objects that wish to use MulticoreWrapper for multicore support must implement
 * this interface. Objects that implement this interface should, of course, be threadsafe.
 *
 * @author Spence Green
 *
 * @param <I> input type
 * @param <O> output type
 */
public interface ThreadsafeProcessor<I,O> {

  /**
   * Set the input item that will be processed when a thread is allocated to
   * this processor.
   *
   * @param input the object to be processed
   * @return the result of the processing
   */
  O process(I input);

  /**
   * Return a new threadsafe instance.
   */
  ThreadsafeProcessor<I,O> newInstance();

}
