1
1
openmpi/ompi/mpi/java/java/Status.java
Ralph Castain 1e2019ce2a Revert "Update to sync with OMPI master and cleanup to build"
This reverts commit cb55c88a8b7817d5891ff06a447ea190b0e77479.
2016-11-22 15:03:20 -08:00

278 строки
8.4 KiB
Java

/*
* Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2005 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*
*
* This file is almost a complete re-write for Open MPI compared to the
* original mpiJava package. Its license and copyright are listed below.
* See <path to ompi/mpi/java/README> for more information.
*
*
* 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.
*
*
* File : Status.java
* Author : Sang Lim, Sung-Hoon Ko, Xinying Li, Bryan Carpenter
* Created : Thu Apr 9 12:22:15 1998
* Revision : $Revision: 1.15 $
* Updated : $Date: 2003/01/16 16:39:34 $
* Copyright: Northeast Parallel Architectures Center
* at Syracuse University 1998
*/
package mpi;
/**
* This class represents {@code MPI_Status}.
*/
public final class Status
{
protected final long[] data;
static
{
init();
}
private static native void init();
/**
* Status objects must be created only by the MPI methods.
*/
protected Status()
{
data = new long[6];
}
/**
* Returns the number of received entries.
* <p>Java binding of the MPI operation {@code MPI_GET_COUNT}.
* @param datatype datatype of each item in receive buffer
* @return number of received entries
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public int getCount(Datatype datatype) throws MPIException
{
MPI.check();
int i = 0;
int source = (int)data[i++];
int tag = (int)data[i++];
int error = (int)data[i++];
int cancelled = (int)data[i++];
long ucount = data[i++];
return getCount(source, tag, error, cancelled, ucount, datatype.handle);
}
private native int getCount(
int source, int tag, int error,
int cancelled, long ucount, long datatype) throws MPIException;
/**
* Tests if the communication was cancelled.
* <p>Java binding of the MPI operation {@code MPI_TEST_CANCELLED}.
* @return true if the operation was succesfully cancelled, false otherwise
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public boolean isCancelled() throws MPIException
{
MPI.check();
int i = 0;
int source = (int)data[i++];
int tag = (int)data[i++];
int error = (int)data[i++];
int cancelled = (int)data[i++];
long ucount = data[i++];
return isCancelled(source, tag, error, cancelled, ucount);
}
private native boolean isCancelled(
int source, int tag, int error, int cancelled, long ucount)
throws MPIException;
/**
* Retrieves the number of basic elements from status.
* <p>Java binding of the MPI operation {@code MPI_GET_ELEMENTS}.
* @param datatype datatype used by receive operation
* @return number of received basic elements
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public int getElements(Datatype datatype) throws MPIException
{
MPI.check();
int i = 0;
int source = (int)data[i++];
int tag = (int)data[i++];
int error = (int)data[i++];
int cancelled = (int)data[i++];
long ucount = data[i++];
return getElements(source, tag, error, cancelled, ucount, datatype.handle);
}
private native int getElements(
int source, int tag, int error,
int cancelled, long ucount, long datatype) throws MPIException;
/**
* Retrieves the number of basic elements from status.
* <p>Java binding of the MPI operation {@code MPI_GET_ELEMENTS_X}.
* @param datatype datatype used by receive operation
* @return number of received basic elements
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public Count getElementsX(Datatype datatype) throws MPIException
{
MPI.check();
int i = 0;
int source = (int)data[i++];
int tag = (int)data[i++];
int error = (int)data[i++];
int cancelled = (int)data[i++];
long ucount = data[i++];
return getElementsX(source, tag, error, cancelled, ucount, datatype.handle);
}
private native Count getElementsX(
int source, int tag, int error,
int cancelled, long ucount, long datatype) throws MPIException;
/**
* Sets the number of basic elements for this status object.
* <p>Java binding of the MPI operation {@code MPI_STATUS_SET_ELEMENTS}.
* @param datatype datatype used by receive operation
* @param count number of elements to associate with the status
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public void setElements(Datatype datatype, int count) throws MPIException
{
MPI.check();
int i = 0;
int source = (int)data[i++];
int tag = (int)data[i++];
int error = (int)data[i++];
int cancelled = (int)data[i++];
long ucount = data[i++];
data[4] = setElements(source, tag, error, cancelled, ucount, datatype.handle, count);
}
private native int setElements(
int source, int tag, int error,
int cancelled, long ucount, long datatype, int count) throws MPIException;
/**
* Sets the number of basic elements for this status object.
* <p>Java binding of the MPI operation {@code MPI_STATUS_SET_ELEMENTS_X}.
* @param datatype datatype used by receive operation
* @param count number of elements to associate with the status
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public void setElementsX(Datatype datatype, Count count) throws MPIException
{
MPI.check();
int i = 0;
int source = (int)data[i++];
int tag = (int)data[i++];
int error = (int)data[i++];
int cancelled = (int)data[i++];
long ucount = data[i++];
data[4] = setElementsX(source, tag, error, cancelled, ucount, datatype.handle, count.getCount());
}
private native long setElementsX(
int source, int tag, int error,
int cancelled, long ucount, long datatype, long count) throws MPIException;
/**
* Sets the cancelled flag.
* <p>Java binding of the MPI operation {@code MPI_STATUS_SET_CANCELLED}.
* @param flag if true indicates request was cancelled
* @throws MPIException Signals that an MPI exception of some sort has occurred.
*/
public void setCancelled(boolean flag) throws MPIException
{
MPI.check();
int i = 0;
int source = (int)data[i++];
int tag = (int)data[i++];
int error = (int)data[i++];
int cancelled = (int)data[i++];
long ucount = data[i++];
if(flag) {
setCancelled(source, tag, error, cancelled, ucount, 1);
data[3] = 1;
} else {
setCancelled(source, tag, error, cancelled, ucount, 0);
data[3] = 0;
}
}
private native void setCancelled(
int source, int tag, int error,
int cancelled, long ucount, int flag) throws MPIException;
/**
* Returns the "source" of message.
* <p>Java binding of the MPI value {@code MPI_SOURCE}.
* @return source of message
*/
public int getSource()
{
return (int)data[0];
}
/**
* Returns the "tag" of message.
* <p>Java binding of the MPI value {@code MPI_TAG}.
* @return tag of message
*/
public int getTag()
{
return (int)data[1];
}
/**
* Returns the {@code MPI_ERROR} of message.
* @return error of message.
*/
public int getError()
{
return (int)data[2];
}
/**
* Returns the index of message.
* @return index of message.
*/
public int getIndex()
{
return (int)data[5];
}
} // Status