85bb1a9c90
is the last one on the list and as on C the caller "make it right" this addition will not affect the way we handle the user defined copy functions. Only the C version of the function has this additional parameter. As it represent the pointer to the newly created MPI object It hold the key to allow us to modify the new object (communicator, window or type) depending on some key stored on the initial communicator. This commit was SVN r9371.
58 строки
1.9 KiB
C
58 строки
1.9 KiB
C
/*
|
|
* Copyright (c) 2004-2005 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$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
#include "ompi_config.h"
|
|
#include <stdio.h>
|
|
|
|
#include "ompi/mpi/c/bindings.h"
|
|
#include "ompi/attribute/attribute.h"
|
|
|
|
#if OMPI_HAVE_WEAK_SYMBOLS && OMPI_PROFILING_DEFINES
|
|
#pragma weak MPI_Win_create_keyval = PMPI_Win_create_keyval
|
|
#endif
|
|
|
|
#if OMPI_PROFILING_DEFINES
|
|
#include "ompi/mpi/c/profile/defines.h"
|
|
#endif
|
|
|
|
static const char FUNC_NAME[] = "MPI_Win_create_keyval";
|
|
|
|
|
|
int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
|
|
MPI_Win_delete_attr_function *win_delete_attr_fn,
|
|
int *win_keyval, void *extra_state)
|
|
{
|
|
int ret;
|
|
ompi_attribute_fn_ptr_union_t copy_fn;
|
|
ompi_attribute_fn_ptr_union_t del_fn;
|
|
|
|
if (MPI_PARAM_CHECK) {
|
|
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
|
if ((NULL == win_copy_attr_fn) || (NULL == win_delete_attr_fn) ||
|
|
(NULL == win_keyval)) {
|
|
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_ARG,
|
|
FUNC_NAME);
|
|
}
|
|
}
|
|
copy_fn.attr_win_copy_fn = (MPI_Win_internal_copy_attr_function*)win_copy_attr_fn;
|
|
del_fn.attr_win_delete_fn = win_delete_attr_fn;
|
|
|
|
ret = ompi_attr_create_keyval(WIN_ATTR, copy_fn, del_fn,
|
|
win_keyval, extra_state, 0);
|
|
OMPI_ERRHANDLER_RETURN(ret, MPI_COMM_WORLD, MPI_ERR_OTHER, FUNC_NAME);
|
|
}
|