/**
 * Copyright (c) 2012-2013, Daniele Codecasa <codecasa.job@gmail.com>,
 * Models and Algorithms for Data & Text Mining (MAD) laboratory of
 * Milano-Bicocca University, and all the CTBNCToolkit contributors
 * that will follow.
 * All rights reserved.
 *
 * @author Daniele Codecasa and all the CTBNCToolkit contributors that will follow.
 * @copyright 2012-2013 Daniele Codecasa, MAD laboratory, and all the CTBNCToolkit contributors that will follow
 */
package CTBNCToolkit.performances;

import java.util.Map;

/**
 * @author Daniele Codecasa <codecasa.job@gmail.com>
 *
 * Interface that defines a factory for aggregate
 * performances.
 * 
 * @param <TimeType> type of the time interval in the trajectories (Integer = discrete time, Double = continuous time)
 * @param <AggPType> type of aggregate performances returned
 * @param <SingPType> type of single run performances returned
 */
public interface IAggregatePerformancesFactory<TimeType extends Number & Comparable<TimeType>, AggPType extends IAggregatePerformances<TimeType,SingPType>, SingPType extends ISingleRunPerformances<TimeType>> {

	/**
	 * Generate a new instance of aggregate
	 * performances.
	 * 
	 * @param classIndexToValue map index to class value
	 * @return new aggregate performances instance.
	 */
	public AggPType newAggregateInstance(Map<Integer,String> classIndexToValue);
	
	/**
	 * Generate a new instance of single run
	 * performances.
	 * This instance must be compatible with
	 * the aggregate performances instances
	 * generated by the factory in order to
	 * add them in the aggregate performances.
	 * 
	 * @param classIndexToValue map index to class value
	 * @return new single run performances instance.
	 */
	public SingPType newSingleRunInstance(Map<Integer,String> classIndexToValue);
}
