/* Copyright Intel Corporation. This software and the related documents are Intel copyrighted materials, and your use of them is governed by the express license under which they were provided to you (License). Unless the License provides otherwise, you may not use, modify, copy, publish, distribute, disclose or transmit this software or the related documents without Intel's prior written permission. This software and the related documents are provided as is, with no express or implied warranties, other than those that are expressly stated in the License. */ /* * Copyright (C) by Argonne National Laboratory COPYRIGHT The following is a notice of limited availability of the code, and disclaimer which must be included in the prologue of the code and in all source listings of the code. Copyright Notice 1998--2020, Argonne National Laboratory Permission is hereby granted to use, reproduce, prepare derivative works, and to redistribute to others. This software was authored by: Mathematics and Computer Science Division Argonne National Laboratory, Argonne IL 60439 (and) Department of Computer Science University of Illinois at Urbana-Champaign GOVERNMENT LICENSE Portions of this material resulted from work developed under a U.S. Government Contract and are subject to the following license: the Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide license in this computer software to reproduce, prepare derivative works, and perform publicly and display publicly. DISCLAIMER This computer code material was prepared, in part, as an account of work sponsored by an agency of the United States Government. Neither the United States, nor the University of Chicago, nor any of their employees, makes any warranty express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights. EXTERNAL CONTRIBUTIONS Portions of this code have been contributed under the above license by: * Intel Corporation * Cray * IBM Corporation * Microsoft Corporation * Mellanox Technologies Ltd. * DataDirect Networks. * Oak Ridge National Laboratory * Sun Microsystems, Lustre group * Dolphin Interconnect Solutions Inc. * Institut Polytechnique de Bordeaux * * * This file is automatically generated by buildiface -nosep -initfile=./cxx.vlist * DO NOT EDIT */ /* style: c++ header */ #ifdef MPI #error "You cannot define MPI; that name is reserved for the MPI namespace" #endif /* * Because the API is defined, some methods have parameters that are * not used. The following definition allows us to suppress warnings * about unused arguments in methods when -Wall -Wextra are specified. * this definition is removed at the end of this file. */ #ifdef MPIR_ARGUNUSED #error MPIR_ARGUNUSED defined #endif #if defined(__GNUC__) && __GNUC__ >= 4 #define MPIR_ARGUNUSED __attribute__((unused)) #else #define MPIR_ARGUNUSED #endif // There is a name conflict between stdio.h and iostream (or iostream.h) // and the MPI C++ binding with respect to the names SEEK_SET, SEEK_CUR, // and SEEK_END. MPI wants these in the MPI namespace, but stdio.h, // iostream, or iostream.h will #define these to integer values. // #undef'ing these can cause obscure problems. #ifndef MPICH_IGNORE_CXX_SEEK // MPICH_DONT_INCLUDE_STDIO_H is another escape hatch for us, just like // MPICH_IGNORE_CXX_SEEK. If we encounter a wacky environment or user in the // wild that does not want our workaround and/or the stdio.h header, then we can // offer them a way out. #ifndef MPICH_DONT_INCLUDE_STDIO_H // ensure that we have SEEK_* defined # include #endif enum MPIR_Dummy_seek_type { MPIR_DUMMY_SEEK_COMMA_VAL = -1 // permits cleaner comma logic #ifdef SEEK_SET , MPIR_SEEK_SET = SEEK_SET # undef SEEK_SET , SEEK_SET = MPIR_SEEK_SET #endif #ifdef SEEK_CUR , MPIR_SEEK_CUR = SEEK_CUR # undef SEEK_CUR , SEEK_CUR = MPIR_SEEK_CUR #endif #ifdef SEEK_END , MPIR_SEEK_END = SEEK_END # undef SEEK_END , SEEK_END = MPIR_SEEK_END #endif #ifdef LOCK_SHARED , MPIR_LOCK_SHARED = LOCK_SHARED # undef LOCK_SHARED , LOCK_SHARED = MPIR_LOCK_SHARED #endif }; #endif // MPICH_IGNORE_CXX_SEEK namespace MPI { #if 1 #define MPIX_CALLREF( _objptr, fnc ) \ { int err = fnc; if (err) { (_objptr)->Call_errhandler( err ); }} #define MPIX_CALLOBJ( _obj, fnc ) \ { int err = fnc; if (err) { (_obj).Call_errhandler( err ); }} #define MPIX_CALLWORLD( fnc ) \ { int err = fnc ; if (err) MPIR_Call_world_errhand( err ); } extern void MPIR_Call_world_errhand( int ); #else #define MPIX_CALLREF( _objptr, fnc ) (void)fnc #define MPIX_CALLOBJ( _obj, fnc ) (void)fnc #define MPIX_CALLWORLD( fnc ) (void)fnc #endif // Typedefs for basic int types typedef MPI_Offset Offset; typedef MPI_Aint Aint; typedef MPI_Fint Fint; // Special internal routine void MPIR_CXX_InitDatatypeNames( void ); // Forward class declarations class Comm; class Nullcomm; class Intercomm; class Intracomm; class Cartcomm; class Graphcomm; class File; // base (classless) routines extern int Detach_buffer( void *&v1 ) ; extern bool Is_initialized( void ) ; extern void Get_processor_name( char * v1, int &v2 ) ; extern void Get_error_string( int v1, char * v2, int &v3 ) ; extern void Compute_dims( int v1, int v2, int v3[] ) ; extern void Get_version( int &v1, int &v2 ) ; extern void Finalize( void ) ; extern void Pcontrol( const int v1, ... ) ; extern void Attach_buffer( void * v1, int v2 ) ; extern int Get_error_class( int v1 ) ; extern Intracomm COMM_WORLD; extern File FILE_NULL; class Exception { protected: int the_real_exception; public: // new/delete inline Exception(int obj) : the_real_exception(obj) {} inline Exception(void) : the_real_exception(0) {} virtual ~Exception() {} // copy/assignment Exception(const Exception &obj) : the_real_exception(obj.the_real_exception){} Exception& operator=(const Exception &obj) { the_real_exception = obj.the_real_exception; return *this; } // logical bool operator== (const Exception &obj) { return (the_real_exception == obj.the_real_exception); } bool operator!= (const Exception &obj) { return (the_real_exception != obj.the_real_exception); } // C/C++ cast and assignment inline operator int*() { return &the_real_exception; } inline operator int() const { return the_real_exception; } Exception& operator=(const int& obj) { the_real_exception = obj; return *this; } protected: char the_error_message[MPI_MAX_ERROR_STRING]; public: int Get_error_code(void) { return the_real_exception; } int Get_error_class(void) { return MPI::Get_error_class(the_real_exception); } const char *Get_error_string(void) { int len; MPI_Error_string(the_real_exception, the_error_message, &len); return the_error_message; } }; class Datatype { friend class Comm; friend class Status; friend class Intracomm; friend class Intercomm; friend class Win; friend class File; friend class Op; protected: MPI_Datatype the_real_datatype; public: // new/delete inline Datatype(MPI_Datatype obj) : the_real_datatype(obj) {} inline Datatype(void) : the_real_datatype(MPI_DATATYPE_NULL) {} virtual ~Datatype() {} // copy/assignment Datatype(const Datatype &obj) : the_real_datatype(obj.the_real_datatype){} Datatype& operator=(const Datatype &obj) { the_real_datatype = obj.the_real_datatype; return *this; } // logical bool operator== (const Datatype &obj) { return (the_real_datatype == obj.the_real_datatype); } bool operator!= (const Datatype &obj) { return (the_real_datatype != obj.the_real_datatype); } // C/C++ cast and assignment inline operator MPI_Datatype*() { return &the_real_datatype; } inline operator MPI_Datatype() const { return the_real_datatype; } Datatype& operator=(const MPI_Datatype& obj) { the_real_datatype = obj; return *this; } virtual void Commit( void ) { MPIX_CALLWORLD( MPI_Type_commit( (MPI_Datatype *) &the_real_datatype )); } virtual void Free( void ) { MPIX_CALLWORLD( MPI_Type_free( (MPI_Datatype *) &the_real_datatype )); } virtual Datatype Create_indexed( int v1, const int * v2, const int * v3 ) const { Datatype v5; MPIX_CALLWORLD( MPI_Type_indexed( v1, (const int *)v2, (const int *)v3, (MPI_Datatype) the_real_datatype, &(v5.the_real_datatype) )); return v5; } virtual Datatype Create_contiguous( int v1 ) const { Datatype v3; MPIX_CALLWORLD( MPI_Type_contiguous( v1, (MPI_Datatype) the_real_datatype, &(v3.the_real_datatype) )); return v3; } virtual Datatype Create_vector( int v1, int v2, int v3 ) const { Datatype v5; MPIX_CALLWORLD( MPI_Type_vector( v1, v2, v3, (MPI_Datatype) the_real_datatype, &(v5.the_real_datatype) )); return v5; } static Datatype Create_struct( int v1, int v2[], Aint v3[], const Datatype v4[] ) { Datatype v5; MPI_Datatype *l4 = new MPI_Datatype[v1]; { int i4; for (i4=0;i4