code: package org.eclipse.emf.henshin.interpreter;
  
  import java.util.List;
  
  import org.eclipse.emf.ecore.EClass;
  import org.eclipse.emf.ecore.EObject;
  
  /**
   * An extension of {@link EGraph}s to support partitioning.
   * @author Christian Krause
   */
  public interface PartitionedEGraph extends EGraph {
  	
  	/**
  	 * Get the number of partitions of this partitioned graph.
  	 * @return The number of partitions.
  	 */
  	int getNumPartitions();
  	
  	/**
  	 * Get all {@link EObject}s of this graph which are compatible with the given type
  	 * and are in a given partition. The partition must be greater or equal zero and 
  	 * strictly less than the number of partitions of this graph.
  	 * This returns a fresh and modifiable list.
  	 * @param type The type of the objects.
  	 * @param strict Whether subtypes are excluded from the result.
  	 * @param partition The partition to be used.
  	 * @return A set of {@link EObject}s compatible with the type.
  	 */
  	List<EObject> getDomain(EClass type, boolean strict, int partition);
  	
  	/**
  	 * Returns the size of the domain for a type in a partition. The returned number
  	 * equals the size of the list returned by {@link #getDomain(EClass, boolean, int)}.
  	 * This method should be used whenever the actual objects are not needed.
  	 * @param type The type.
  	 * @param strict Whether subtypes are excluded.
  	 * @param partition The partition to be used.
  	 * @return The size of the domain.
  	 */
  	int getDomainSize(EClass type, boolean strict, int partition);
  
  }
  