package eu.dnetlib.contract.cp.comp;

import org.contract4j5.contract.Contract;
import org.contract4j5.contract.Post;
import org.contract4j5.contract.Pre;

/**
 * Comparator module.
 * @author mhorst
 *
 */
@Contract
public interface IComparatorModule<CompObject extends Object> {

	/**
	 * Compares objects given as parameters.
	 * Returns true if objects are equal according to the 
	 * {@link IComparatorModule} implementation.
	 * None of input parameters can be null.
	 * @param obj1 not CompObject object
	 * @param obj2 not CompObject object
	 * @return true if objects are equal
	 */
	@Pre("obj1 != null && obj2 != null")
	public boolean equals(CompObject obj1, CompObject obj2);
	
	/**
	 * Returns supported class or interface by comparator.
	 * @return supported class or interface by comparator
	 */
	@Post("$return != null")
	public Class<? extends Object> getSupportedClass();
	
}
