root/ompi/mpi/cxx/cxx_glue.c

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

DEFINITIONS

This source file includes following definitions.
  1. ompi_cxx_comm_get_type
  2. ompi_cxx_errhandler_invoke_comm
  3. ompi_cxx_errhandler_invoke_file
  4. ompi_cxx_attr_create_keyval_comm
  5. ompi_cxx_attr_create_keyval_win
  6. ompi_cxx_attr_create_keyval_type
  7. ompi_cxx_errhandler_create_comm
  8. ompi_cxx_errhandler_create_win
  9. ompi_cxx_errhandler_create_file
  10. ompi_cxx_new_intercept_state
  11. ompi_cxx_errhandler_set_callbacks

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2016      Los Alamos National Security, LLC.  All rights
   4  *                         reserved.
   5  * Copyright (c) 2016-2017 Research Organization for Information Science
   6  *                         and Technology (RIST). All rights reserved.
   7  * $COPYRIGHT$
   8  *
   9  * Additional copyrights may follow
  10  *
  11  * $HEADER$
  12  */
  13 
  14 #include "ompi_config.h"
  15 
  16 #include "ompi/communicator/communicator.h"
  17 #include "ompi/attribute/attribute.h"
  18 #include "ompi/errhandler/errhandler.h"
  19 #include "ompi/file/file.h"
  20 #include "opal/class/opal_list.h"
  21 #include "cxx_glue.h"
  22 
  23 typedef struct ompi_cxx_intercept_file_extra_state_item_t {
  24     opal_list_item_t super;
  25     ompi_cxx_intercept_file_extra_state_t state;
  26 } ompi_cxx_intercept_file_extra_state_item_t;
  27 
  28 OBJ_CLASS_DECLARATION(ompi_cxx_intercept_file_extra_state_item_t);
  29 OBJ_CLASS_INSTANCE(ompi_cxx_intercept_file_extra_state_item_t, opal_list_item_t,
  30                    NULL, NULL);
  31 
  32 ompi_cxx_communicator_type_t ompi_cxx_comm_get_type (MPI_Comm comm)
  33 {
  34     if (OMPI_COMM_IS_GRAPH(comm)) {
  35         return OMPI_CXX_COMM_TYPE_GRAPH;
  36     } else if (OMPI_COMM_IS_CART(comm)) {
  37         return OMPI_CXX_COMM_TYPE_CART;
  38     } else if (OMPI_COMM_IS_INTRA(comm)) {
  39         return OMPI_CXX_COMM_TYPE_INTRACOMM;
  40     } else if (OMPI_COMM_IS_INTER(comm)) {
  41         return OMPI_CXX_COMM_TYPE_INTERCOMM;
  42     }
  43 
  44     return OMPI_CXX_COMM_TYPE_UNKNOWN;
  45 }
  46 
  47 int ompi_cxx_errhandler_invoke_comm (MPI_Comm comm, int ret, const char *message)
  48 {
  49     return OMPI_ERRHANDLER_INVOKE (comm, ret, message);
  50 }
  51 
  52 int ompi_cxx_errhandler_invoke_file (MPI_File file, int ret, const char *message)
  53 {
  54     return OMPI_ERRHANDLER_INVOKE (file, ret, message);
  55 }
  56 
  57 int ompi_cxx_attr_create_keyval_comm (MPI_Comm_copy_attr_function *copy_fn,
  58                                       MPI_Comm_delete_attr_function* delete_fn, int *keyval, void *extra_state,
  59                                       int flags, void *bindings_extra_state)
  60 {
  61     ompi_attribute_fn_ptr_union_t copy_fn_u = {.attr_communicator_copy_fn =
  62                                                (MPI_Comm_internal_copy_attr_function *) copy_fn};
  63     ompi_attribute_fn_ptr_union_t delete_fn_u = {.attr_communicator_delete_fn =
  64                                                  (MPI_Comm_delete_attr_function *) delete_fn};
  65 
  66     return ompi_attr_create_keyval (COMM_ATTR, copy_fn_u, delete_fn_u, keyval, extra_state, 0, bindings_extra_state);
  67 }
  68 
  69 int ompi_cxx_attr_create_keyval_win (MPI_Win_copy_attr_function *copy_fn,
  70                                       MPI_Win_delete_attr_function* delete_fn, int *keyval, void *extra_state,
  71                                       int flags, void *bindings_extra_state)
  72 {
  73     ompi_attribute_fn_ptr_union_t copy_fn_u = {.attr_win_copy_fn =
  74                                                (MPI_Win_internal_copy_attr_function *) copy_fn};
  75     ompi_attribute_fn_ptr_union_t delete_fn_u = {.attr_win_delete_fn =
  76                                                  (MPI_Win_delete_attr_function *) delete_fn};
  77 
  78     return ompi_attr_create_keyval (WIN_ATTR, copy_fn_u, delete_fn_u, keyval, extra_state, 0, NULL);
  79 }
  80 
  81 int ompi_cxx_attr_create_keyval_type (MPI_Type_copy_attr_function *copy_fn,
  82                                       MPI_Type_delete_attr_function* delete_fn, int *keyval, void *extra_state,
  83                                       int flags, void *bindings_extra_state)
  84 {
  85     ompi_attribute_fn_ptr_union_t copy_fn_u = {.attr_datatype_copy_fn =
  86                                                (MPI_Type_internal_copy_attr_function *) copy_fn};
  87     ompi_attribute_fn_ptr_union_t delete_fn_u = {.attr_datatype_delete_fn =
  88                                                  (MPI_Type_delete_attr_function *) delete_fn};
  89 
  90     return ompi_attr_create_keyval (TYPE_ATTR, copy_fn_u, delete_fn_u, keyval, extra_state, 0, NULL);
  91 }
  92 
  93 MPI_Errhandler ompi_cxx_errhandler_create_comm (ompi_cxx_dummy_fn_t *fn)
  94 {
  95     ompi_errhandler_t *errhandler;
  96     errhandler = ompi_errhandler_create(OMPI_ERRHANDLER_TYPE_COMM,
  97                                         (ompi_errhandler_generic_handler_fn_t *) fn,
  98                                         OMPI_ERRHANDLER_LANG_CXX);
  99     errhandler->eh_cxx_dispatch_fn =
 100         (ompi_errhandler_cxx_dispatch_fn_t *) ompi_mpi_cxx_comm_errhandler_invoke;
 101     return errhandler;
 102 }
 103 
 104 MPI_Errhandler ompi_cxx_errhandler_create_win (ompi_cxx_dummy_fn_t *fn)
 105 {
 106     ompi_errhandler_t *errhandler;
 107     errhandler = ompi_errhandler_create(OMPI_ERRHANDLER_TYPE_WIN,
 108                                         (ompi_errhandler_generic_handler_fn_t *) fn,
 109                                         OMPI_ERRHANDLER_LANG_CXX);
 110     errhandler->eh_cxx_dispatch_fn =
 111         (ompi_errhandler_cxx_dispatch_fn_t *) ompi_mpi_cxx_win_errhandler_invoke;
 112     return errhandler;
 113 }
 114 
 115 MPI_Errhandler ompi_cxx_errhandler_create_file (ompi_cxx_dummy_fn_t *fn)
 116 {
 117     ompi_errhandler_t *errhandler;
 118     errhandler = ompi_errhandler_create(OMPI_ERRHANDLER_TYPE_FILE,
 119                                         (ompi_errhandler_generic_handler_fn_t *) fn,
 120                                         OMPI_ERRHANDLER_LANG_CXX);
 121     errhandler->eh_cxx_dispatch_fn =
 122         (ompi_errhandler_cxx_dispatch_fn_t *) ompi_mpi_cxx_file_errhandler_invoke;
 123     return errhandler;
 124 }
 125 
 126 ompi_cxx_intercept_file_extra_state_t
 127 *ompi_cxx_new_intercept_state (void *read_fn_cxx, void *write_fn_cxx, void *extent_fn_cxx,
 128                                void *extra_state_cxx)
 129 {
 130     ompi_cxx_intercept_file_extra_state_item_t *intercept;
 131 
 132     intercept = OBJ_NEW(ompi_cxx_intercept_file_extra_state_item_t);
 133     if (NULL == intercept) {
 134         return NULL;
 135     }
 136 
 137     opal_list_append(&ompi_registered_datareps, &intercept->super);
 138     intercept->state.read_fn_cxx = read_fn_cxx;
 139     intercept->state.write_fn_cxx = write_fn_cxx;
 140     intercept->state.extent_fn_cxx = extent_fn_cxx;
 141     intercept->state.extra_state_cxx = extra_state_cxx;
 142 
 143     return &intercept->state;
 144 }
 145 
 146 void ompi_cxx_errhandler_set_callbacks (struct ompi_errhandler_t *errhandler, MPI_Comm_errhandler_function *eh_comm_fn,
 147                                         ompi_file_errhandler_function *eh_file_fn, MPI_Win_errhandler_function *eh_win_fn)
 148 {
 149     errhandler->eh_comm_fn = eh_comm_fn;
 150     errhandler->eh_file_fn = eh_file_fn;
 151     errhandler->eh_win_fn = eh_win_fn;
 152 }

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