root/ompi/mpi/fortran/use-mpi-f08/buffer_detach.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ompi_buffer_detach_f08
  2. pompi_buffer_detach_f08

   1 /*
   2  * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
   3  *                         University Research and Technology
   4  *                         Corporation.  All rights reserved.
   5  * Copyright (c) 2004-2005 The University of Tennessee and The University
   6  *                         of Tennessee Research Foundation.  All rights
   7  *                         reserved.
   8  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
   9  *                         University of Stuttgart.  All rights reserved.
  10  * Copyright (c) 2004-2005 The Regents of the University of California.
  11  *                         All rights reserved.
  12  * Copyright (c) 2007      Sun Microsystems, Inc.  All rights reserved.
  13  * Copyright (c) 2011-2015 Cisco Systems, Inc.  All rights reserved.
  14  * Copyright (c) 2015      Research Organization for Information Science
  15  *                         and Technology (RIST). All rights reserved.
  16  * $COPYRIGHT$
  17  *
  18  * Additional copyrights may follow
  19  *
  20  * $HEADER$
  21  */
  22 
  23 #include "ompi_config.h"
  24 
  25 #include "mpi.h"
  26 #include "ompi/mpi/fortran/base/fint_2_int.h"
  27 
  28 /*
  29  * This function implemented in this file is only called from Fortran,
  30  * so we never bothered to put a prototype for it in any C header
  31  * file.  To avoid compiler warnings about no protoype, we prototype
  32  * it here.
  33  */
  34 OMPI_DECLSPEC void ompi_buffer_detach_f08(char *buffer, MPI_Fint *size,
  35                                           MPI_Fint *ierr);
  36 
  37 OMPI_DECLSPEC void pompi_buffer_detach_f08(char *buffer, MPI_Fint *size,
  38                                           MPI_Fint *ierr);
  39 
  40 /* (this comment is repeated in ompi/mpi/fortran/mpif-h/buffer_detach_f.c)
  41  *
  42  * MPI-3.1 section 3.6, page 45, states that the mpif.h and mpi module
  43  * interfaces for MPI_BUFFER_DETACH ignore the buffer argument.
  44  * Therefore, for the mpif.h and mpi module interfaces, we use a dummy
  45  * variable and leave the value handed in alone.
  46  *
  47  * The mpi_f08 implementation for MPI_BUFFER_DETACH therefore is a
  48  * separate routine in the use-mpi-f08 directory (it's not built in
  49  * the mpif-h directory because of all the different combinations of
  50  * supporting weak symbols (or not), building the profiling layer (or
  51  * not), etc.).
  52  *
  53  * Note that we only need to build this function once -- the F08
  54  * interfaces for MPI_BUFFER_ATTACH and PMPI_BUFFER_ATTACH both
  55  * bind(C) to the name ompi_buffer_detach_f08.
  56  */
  57 void ompi_buffer_detach_f08(char *buffer, MPI_Fint *size, MPI_Fint *ierr)
  58 {
  59     int c_ierr;
  60     void *dummy;
  61     OMPI_SINGLE_NAME_DECL(size);
  62 
  63     c_ierr = PMPI_Buffer_detach(&dummy, OMPI_SINGLE_NAME_CONVERT(size));
  64     if (NULL != ierr) {
  65         *ierr = OMPI_INT_2_FINT(c_ierr);
  66     }
  67 
  68     if (MPI_SUCCESS == c_ierr) {
  69         OMPI_SINGLE_INT_2_FINT(size);
  70         *(void **)buffer = dummy;
  71     }
  72 }
  73 
  74 void pompi_buffer_detach_f08(char *buffer, MPI_Fint *size, MPI_Fint *ierr)
  75 {
  76     ompi_buffer_detach_f08(buffer, size, ierr);
  77 }

/* [<][>][^][v][top][bottom][index][help] */