@@ -478,6 +478,11 @@ class TypeDatatypeOut(Type):
478478 def type_text (self , enable_count = False ):
479479 return 'MPI_Datatype *'
480480
481+ @Type .add_type ('DATATYPE_INOUT' , abi_type = ['ompi' ])
482+ class TypeDatatypeOut (Type ):
483+
484+ def type_text (self , enable_count = False ):
485+ return 'MPI_Datatype *'
481486
482487@Type .add_type ('DATATYPE_ARRAY' , abi_type = ['ompi' ])
483488class TypeDatatypeArray (Type ):
@@ -528,7 +533,7 @@ class TypeDatatypeOutStandard(StandardABIType):
528533
529534 @property
530535 def final_code (self ):
531- return [f'*{ self .name } = { ConvertOMPIToStandard .DATATYPE } ((MPI_Datatype) *{ self .name } );' ]
536+ return [f'if (NULL != { self . name } ) *{ self .name } = { ConvertOMPIToStandard .DATATYPE } ((MPI_Datatype) *{ self .name } );' ]
532537
533538 def type_text (self , enable_count = False ):
534539 type_name = self .mangle_name ('MPI_Datatype' )
@@ -538,6 +543,25 @@ def type_text(self, enable_count=False):
538543 def argument (self ):
539544 return f'(MPI_Datatype *) { self .name } '
540545
546+ @Type .add_type ('DATATYPE_INOUT' , abi_type = ['standard' ])
547+ class TypeDatatypeInoutStandard (StandardABIType ):
548+
549+ @property
550+ def init_code (self ):
551+ return [f'MPI_Datatype { self .tmpname } = (NULL != { self .name } ) ? { ConvertFuncs .DATATYPE } (*{ self .name } ) : MPI_DATATYPE_NULL;' ]
552+
553+ @property
554+ def final_code (self ):
555+ return [f'if (NULL != { self .name } ) *{ self .name } = { ConvertOMPIToStandard .DATATYPE } ((MPI_Datatype) { self .tmpname } );' ]
556+
557+ def type_text (self , enable_count = False ):
558+ type_name = self .mangle_name ('MPI_Datatype' )
559+ return f'{ type_name } *'
560+
561+ @property
562+ def argument (self ):
563+ return f'(MPI_Datatype *) (NULL != { self .name } ? &{ self .tmpname } : NULL)'
564+
541565@Type .add_type ('DATATYPE_ARRAY' , abi_type = ['standard' ])
542566class TypeDatatypeArrayStandard (StandardABIType ):
543567
@@ -787,6 +811,33 @@ def argument(self):
787811 return f'(MPI_Comm *) { self .name } '
788812
789813
814+ @Type .add_type ('COMM_INOUT' , abi_type = ['ompi' ])
815+ class TypeCommInOut (Type ):
816+
817+ def type_text (self , enable_count = False ):
818+ return 'MPI_Comm *'
819+
820+
821+ @Type .add_type ('COMM_INOUT' , abi_type = ['standard' ])
822+ class TypeCommInOutStandard (StandardABIType ):
823+
824+ @property
825+ def init_code (self ):
826+ return [f'MPI_Comm { self .tmpname } = (NULL != { self .name } ) ? { ConvertFuncs .COMM } (*{ self .name } ) : MPI_COMM_NULL;' ]
827+
828+ @property
829+ def final_code (self ):
830+ return [f'if (NULL != { self .name } ) *{ self .name } = { ConvertOMPIToStandard .COMM } ({ self .tmpname } );' ]
831+
832+ def type_text (self , enable_count = False ):
833+ type_name = self .mangle_name ('MPI_Comm' )
834+ return f'{ type_name } *'
835+
836+ @property
837+ def argument (self ):
838+ return f'(MPI_Comm *) (NULL != { self .name } ? &{ self .tmpname } : NULL)'
839+
840+
790841@Type .add_type ('WIN' , abi_type = ['ompi' ])
791842class TypeWindow (Type ):
792843
@@ -832,6 +883,31 @@ def type_text(self, enable_count=False):
832883 def argument (self ):
833884 return f'(MPI_Win *) { self .name } '
834885
886+ @Type .add_type ('WIN_INOUT' , abi_type = ['ompi' ])
887+ class TypeWinInOut (Type ):
888+
889+ def type_text (self , enable_count = False ):
890+ return 'MPI_Win *'
891+
892+
893+ @Type .add_type ('WIN_INOUT' , abi_type = ['standard' ])
894+ class TypeWinInOutStandard (StandardABIType ):
895+
896+ @property
897+ def init_code (self ):
898+ return [f'MPI_Win { self .tmpname } = (NULL != { self .name } ) ? { ConvertFuncs .WIN } (*{ self .name } ) : MPI_WIN_NULL;' ]
899+
900+ @property
901+ def final_code (self ):
902+ return [f'if (NULL != { self .name } ) *{ self .name } = { ConvertOMPIToStandard .WIN } ({ self .tmpname } );' ]
903+
904+ def type_text (self , enable_count = False ):
905+ type_name = self .mangle_name ('MPI_Win' )
906+ return f'{ type_name } *'
907+
908+ @property
909+ def argument (self ):
910+ return f'(MPI_Win *) (NULL != { self .name } ? &{ self .tmpname } : NULL)'
835911
836912@Type .add_type ('REQUEST' , abi_type = ['ompi' ])
837913class TypeRequest (Type ):
@@ -1324,7 +1400,7 @@ def init_code(self):
13241400
13251401 @property
13261402 def argument (self ):
1327- return f'&{ self .tmpname } '
1403+ return f'(MPI_File *) (NULL != { self . name } ? &{ self .tmpname } : NULL) '
13281404
13291405@Type .add_type ('MESSAGE' , abi_type = ['ompi' ])
13301406class TypeMessage (Type ):
@@ -1395,7 +1471,7 @@ def final_code(self):
13951471
13961472 @property
13971473 def argument (self ):
1398- return f'&{ self .tmpname } '
1474+ return f'(MPI_Message *) (NULL != { self . name } ? &{ self .tmpname } : NULL) '
13991475
14001476 def type_text (self , enable_count = False ):
14011477 type_name = self .mangle_name ('MPI_Message' )
@@ -2010,7 +2086,7 @@ class TypeGroupOutStandard(StandardABIType):
20102086
20112087 @property
20122088 def final_code (self ):
2013- return [f'*{ self .name } = { ConvertOMPIToStandard .GROUP } ((MPI_Group) *{ self .name } );' ]
2089+ return [f'if (NULL != { self . name } ) *{ self .name } = { ConvertOMPIToStandard .GROUP } ((MPI_Group) *{ self .name } );' ]
20142090
20152091 def type_text (self , enable_count = False ):
20162092 type_name = self .mangle_name ('MPI_Group' )
@@ -2021,6 +2097,32 @@ def argument(self):
20212097 return f'(MPI_Group *) { self .name } '
20222098
20232099
2100+ @Type .add_type ('GROUP_INOUT' , abi_type = ['ompi' ])
2101+ class TypeGroupInOut (Type ):
2102+
2103+ def type_text (self , enable_count = False ):
2104+ return 'MPI_Group *'
2105+
2106+
2107+ @Type .add_type ('GROUP_INOUT' , abi_type = ['standard' ])
2108+ class TypeGroupInOutStandard (StandardABIType ):
2109+
2110+ @property
2111+ def init_code (self ):
2112+ return [f'MPI_Group { self .tmpname } = (NULL != { self .name } ) ? { ConvertFuncs .GROUP } (*{ self .name } ) : MPI_GROUP_NULL;' ]
2113+
2114+ @property
2115+ def final_code (self ):
2116+ return [f'if (NULL != { self .name } ) *{ self .name } = { ConvertOMPIToStandard .GROUP } ({ self .tmpname } );' ]
2117+
2118+ def type_text (self , enable_count = False ):
2119+ type_name = self .mangle_name ('MPI_Group' )
2120+ return f'{ type_name } *'
2121+
2122+ @property
2123+ def argument (self ):
2124+ return f'(MPI_Group *) (NULL != { self .name } ? &{ self .tmpname } : NULL)'
2125+
20242126@Type .add_type ('SESSION_INOUT' , abi_type = ['ompi' ])
20252127class TypeSessionOut (Type ):
20262128
@@ -2039,19 +2141,19 @@ class TypeSessionInOutStandard(StandardABIType):
20392141
20402142 @property
20412143 def init_code (self ):
2042- return [f'MPI_Session { self .tmpname } = { ConvertFuncs .SESSION } (*{ self .name } );' ]
2144+ return [f'MPI_Session { self .tmpname } = (NULL != { self . name } ) ? { ConvertFuncs .SESSION } (*{ self .name } ) : MPI_SESSION_NULL ;' ]
20432145
20442146 @property
20452147 def final_code (self ):
2046- return [f'*{ self .name } = { ConvertOMPIToStandard .SESSION } ({ self .tmpname } );' ]
2148+ return [f'if (NULL != { self . name } ) *{ self .name } = { ConvertOMPIToStandard .SESSION } ({ self .tmpname } );' ]
20472149
20482150 def type_text (self , enable_count = False ):
20492151 type_name = self .mangle_name ('MPI_Session' )
20502152 return f'{ type_name } *'
20512153
20522154 @property
20532155 def argument (self ):
2054- return f'&{ self .tmpname } '
2156+ return f'(MPI_Session *) (NULL != { self . name } ? &{ self .tmpname } : NULL) '
20552157
20562158
20572159@Type .add_type ('SESSION_OUT' , abi_type = ['standard' ])
@@ -2855,7 +2957,7 @@ def type_text(self, enable_count=False):
28552957 return 'int *'
28562958
28572959@Type .add_type ('COMBINER_OUT' , abi_type = ['standard' ])
2858- class TyperCombinerOutStandard (StandardABIType ):
2960+ class TypeCombinerOutStandard (StandardABIType ):
28592961
28602962 @property
28612963 def final_code (self ):
0 commit comments