root/ompi/errhandler/errcode.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ompi_mpi_errcode_is_invalid
  2. ompi_mpi_errcode_get_class
  3. ompi_mpi_errcode_is_predefined
  4. ompi_mpi_errnum_is_class
  5. ompi_mpi_errnum_get_string

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
   4  *                         University Research and Technology
   5  *                         Corporation.  All rights reserved.
   6  * Copyright (c) 2004-2007 The University of Tennessee and The University
   7  *                         of Tennessee Research Foundation.  All rights
   8  *                         reserved.
   9  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
  10  *                         University of Stuttgart.  All rights reserved.
  11  * Copyright (c) 2004-2005 The Regents of the University of California.
  12  *                         All rights reserved.
  13  * Copyright (c) 2006      University of Houston. All rights reserved.
  14  * Copyright (c) 2007-2015 Cisco Systems, Inc.  All rights reserved.
  15  * Copyright (c) 2015      Los Alamos National Security, LLC.  All rights
  16  *                         reserved.
  17  * $COPYRIGHT$
  18  *
  19  * Additional copyrights may follow
  20  *
  21  * $HEADER$
  22  */
  23 /** @file **/
  24 
  25 #ifndef OMPI_MPI_ERRCODE_H
  26 #define OMPI_MPI_ERRCODE_H
  27 
  28 #include "ompi_config.h"
  29 
  30 #include "mpi.h"
  31 #include "opal/class/opal_object.h"
  32 #include "opal/class/opal_pointer_array.h"
  33 
  34 BEGIN_C_DECLS
  35 
  36 /**
  37  * Back-end type for MPI error codes.
  38  * Please note:
  39  *   if code == MPI_UNDEFINED, than the according structure
  40  *                             represents an error class.
  41  *   For the predefined error codes and classes, code and
  42  *   cls are both set to the according value.
  43  */
  44 struct ompi_mpi_errcode_t {
  45     opal_object_t                      super;
  46     int                                 code;
  47     int                                  cls;
  48     char     errstring[MPI_MAX_ERROR_STRING];
  49 };
  50 typedef struct ompi_mpi_errcode_t ompi_mpi_errcode_t;
  51 
  52 OMPI_DECLSPEC extern opal_pointer_array_t ompi_mpi_errcodes;
  53 OMPI_DECLSPEC extern int ompi_mpi_errcode_lastused;
  54 OMPI_DECLSPEC extern int ompi_mpi_errcode_lastpredefined;
  55 
  56 OMPI_DECLSPEC extern ompi_mpi_errcode_t ompi_err_unknown;
  57 
  58 /**
  59  * Check for a valid error code
  60  */
  61 static inline bool ompi_mpi_errcode_is_invalid(int errcode)
  62 {
  63     if ( errcode >= 0 && errcode <= ompi_mpi_errcode_lastused )
  64         return 0;
  65     else
  66         return 1;
  67 }
  68 
  69 /**
  70  * Return the error class
  71  */
  72 static inline int ompi_mpi_errcode_get_class (int errcode)
  73 {
  74     ompi_mpi_errcode_t *err = NULL;
  75 
  76     if (errcode >= 0) {
  77         err = (ompi_mpi_errcode_t *)opal_pointer_array_get_item(&ompi_mpi_errcodes, errcode);
  78         /* If we get a bogus errcode, return MPI_ERR_UNKNOWN */
  79     }
  80 
  81     if (NULL != err) {
  82         if ( err->code != MPI_UNDEFINED ) {
  83             return err->cls;
  84         }
  85     }
  86     return ompi_err_unknown.cls;
  87 }
  88 
  89 static inline int ompi_mpi_errcode_is_predefined ( int errcode )
  90 {
  91     if ( errcode >= 0 && errcode <= ompi_mpi_errcode_lastpredefined )
  92         return true;
  93 
  94     return false;
  95 }
  96 
  97 static inline int ompi_mpi_errnum_is_class ( int errnum )
  98 {
  99     ompi_mpi_errcode_t *err;
 100 
 101     if (errnum < 0) {
 102         return false;
 103     }
 104 
 105     if ( errnum <= ompi_mpi_errcode_lastpredefined ) {
 106         /* Predefined error values represent an error code and
 107            an error class at the same time */
 108         return true;
 109     }
 110 
 111     err = (ompi_mpi_errcode_t *)opal_pointer_array_get_item(&ompi_mpi_errcodes, errnum);
 112     if (NULL != err) {
 113         if ( MPI_UNDEFINED == err->code) {
 114             /* Distinction between error class and error code is that for the
 115                first one the code section is set to MPI_UNDEFINED  */
 116             return true;
 117         }
 118     }
 119 
 120     return false;
 121 }
 122 
 123 
 124 /**
 125  * Return the error string
 126  */
 127 static inline char* ompi_mpi_errnum_get_string (int errnum)
 128 {
 129     ompi_mpi_errcode_t *err = NULL;
 130 
 131     if (errnum >= 0) {
 132         err = (ompi_mpi_errcode_t *)opal_pointer_array_get_item(&ompi_mpi_errcodes, errnum);
 133         /* If we get a bogus errcode, return a string indicating that this
 134            truly should not happen */
 135     }
 136 
 137     if (NULL != err) {
 138         return err->errstring;
 139     } else {
 140         return "Unknown error (this should not happen!)";
 141     }
 142 }
 143 
 144 
 145 /**
 146  * Initialize the error codes
 147  *
 148  * @returns OMPI_SUCCESS Upon success
 149  * @returns OMPI_ERROR Otherwise
 150  *
 151  * Invoked from ompi_mpi_init(); sets up all static MPI error codes,
 152  */
 153 int ompi_mpi_errcode_init(void);
 154 
 155 /**
 156  * Finalize the error codes.
 157  *
 158  * @returns OMPI_SUCCESS Always
 159  *
 160  * Invokes from ompi_mpi_finalize(); tears down the error code array.
 161  */
 162 int ompi_mpi_errcode_finalize(void);
 163 
 164 /**
 165  * Add an error code
 166  *
 167  * @param: error class to which this new error code belongs to
 168  *
 169  * @returns the new error code on SUCCESS (>0)
 170  * @returns OMPI_ERROR otherwise
 171  *
 172  */
 173 int ompi_mpi_errcode_add (int errclass);
 174 
 175 /**
 176  * Add an error class
 177  *
 178  * @param: none
 179  *
 180  * @returns the new error class on SUCCESS (>0)
 181  * @returns OMPI_ERROR otherwise
 182  *
 183  */
 184 int ompi_mpi_errclass_add (void);
 185 
 186 /**
 187  * Add an error string to an error code
 188  *
 189  * @param: error code for which the string is defined
 190  * @param: error string to add
 191  * @param: length of the string
 192  *
 193  * @returns OMPI_SUCCESS on success
 194  * @returns OMPI_ERROR on error
 195  */
 196 int ompi_mpi_errnum_add_string (int errnum, const char* string, int len);
 197 
 198 END_C_DECLS
 199 
 200 #endif /* OMPI_MPI_ERRCODE_H */

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