package org.apache.samoa.topology.impl;

/*
 * #%L
 * SAMOA
 * %%
 * Copyright (C) 2014 - 2015 Apache Software Foundation
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */

import org.apache.samoa.core.EntranceProcessor;
import org.apache.samoa.topology.LocalEntranceProcessingItem;

/**
 * EntranceProcessingItem for multithreaded engine.
 * 
 * @author Anh Thu Vu
 * 
 */
public class ThreadsEntranceProcessingItem extends LocalEntranceProcessingItem {

  public ThreadsEntranceProcessingItem(EntranceProcessor processor) {
    super(processor);
  }

  // The default waiting time when there is no available events is 100ms
  // Override waitForNewEvents() to change it

}
