MPICollectiveBlockNode.java

package edu.udel.cis.vsl.abc.ast.node.IF.acsl;

import edu.udel.cis.vsl.abc.ast.node.IF.SequenceNode;
import edu.udel.cis.vsl.abc.ast.node.IF.expression.ExpressionNode;

/**
 * An contract block introduced by the
 * <code>mpi_collective(MPI_Comm, Kind):</code> contract constructor.
 * 
 * @author ziqing
 *
 */
public interface MPICollectiveBlockNode extends ContractNode {
	public enum MPICommunicatorMode {
		COL, P2P, BOTH
	};

	/**
	 * Returns the node corresponding to the specific MPI_Comm
	 * 
	 * @return
	 */
	ExpressionNode getMPIComm();

	/**
	 * Returns the node corresponding to the specific MPI collective kind
	 * 
	 * @return
	 */
	MPICommunicatorMode getCollectiveKind();

	/**
	 * Get the body of a MPI collective block
	 * 
	 * @return
	 */
	SequenceNode<ContractNode> getBody();

	@Override
	MPICollectiveBlockNode copy();
}