@@ -20,10 +20,11 @@ class Type(ABC):
2020
2121 def __init__ (self , type_name , name = None ,
2222 mangle_name = lambda name : util .abi_internal_name (name ),
23- count_param = None , ** kwargs ):
23+ count_param = None , outcount_param = None , ** kwargs ):
2424 self .type = type_name
2525 self .name = name
2626 self .count_param = count_param
27+ self .outcount_param = outcount_param
2728 self .mangle_name = mangle_name
2829
2930 @staticmethod
@@ -949,7 +950,7 @@ def final_code(self):
949950 code .append (f'{ ConvertOMPIToStandard .STATUS } ({ self .name } , &{ self .tmpname } );' )
950951 else :
951952 code .extend ([
952- 'for (int i = 0; i < %s; ++i) {' % (self .count_param ,),
953+ 'for (int i = 0; i < %s; ++i) {' % (self .outcount_param ,),
953954 f'{ ConvertOMPIToStandard .STATUS } (&{ self .name } [i], &{ self .tmpname } [i]);' ,
954955 '}' ,
955956 f'free({ self .tmpname } );' ,
@@ -1242,17 +1243,21 @@ def type_text(self, enable_count=False):
12421243class TypeMessageStandard (StandardABIType ):
12431244
12441245 @property
1245- def argument (self ):
1246- return f'(MPI_Message) { self .name } '
1246+ def init_code (self ):
1247+ return [f'MPI_Comm { self .tmpname } = { ConvertFuncs .MESSAGE } ({ self .name } );' ]
1248+
1249+ # @property
1250+ # def argument(self):
1251+ # return f'(MPI_Message) {self.name}'
12471252
12481253 def type_text (self , enable_count = False ):
12491254 return self .mangle_name ('MPI_Message' )
12501255
12511256 def tmp_type_text (self , enable_count = False ):
12521257 return 'MPI_Message'
12531258
1254- def return_code (self , name ):
1255- return [f'return { ConvertOMPIToStandard .MESSAGE } ({ name } );' ]
1259+ # def return_code(self, name):
1260+ # return [f'return {ConvertOMPIToStandard.MESSAGE}({name});']
12561261
12571262@Type .add_type ('MESSAGE_OUT' , abi_type = ['ompi' ])
12581263class TypeMessageOut (Type ):
@@ -1262,7 +1267,11 @@ def type_text(self, enable_count=False):
12621267
12631268
12641269@Type .add_type ('MESSAGE_OUT' , abi_type = ['standard' ])
1265- class TypeMessageOutStandard (Type ):
1270+ class TypeMessageOutStandard (StandardABIType ):
1271+
1272+ @property
1273+ def final_code (self ):
1274+ return [f'*{ self .name } = { ConvertOMPIToStandard .MESSAGE } ((MPI_Message) *{ self .name } );' ]
12661275
12671276 @property
12681277 def argument (self ):
@@ -1272,6 +1281,33 @@ def type_text(self, enable_count=False):
12721281 type_name = self .mangle_name ('MPI_Message' )
12731282 return f'{ type_name } *'
12741283
1284+ @Type .add_type ('MESSAGE_INOUT' , abi_type = ['ompi' ])
1285+ class TypeMessageInOut (Type ):
1286+
1287+ def type_text (self , enable_count = False ):
1288+ return 'MPI_Message *'
1289+
1290+
1291+ @Type .add_type ('MESSAGE_INOUT' , abi_type = ['standard' ])
1292+ class TypeMessageInOutStandard (StandardABIType ):
1293+
1294+ @property
1295+ def init_code (self ):
1296+ return [f'MPI_Message { self .tmpname } = { ConvertFuncs .MESSAGE } (*{ self .name } );' ]
1297+
1298+ @property
1299+ def final_code (self ):
1300+ return [f'*{ self .name } = { ConvertOMPIToStandard .MESSAGE } ({ self .tmpname } );' ]
1301+
1302+ @property
1303+ def argument (self ):
1304+ return f'&{ self .tmpname } '
1305+
1306+ def type_text (self , enable_count = False ):
1307+ type_name = self .mangle_name ('MPI_Message' )
1308+ return f'{ type_name } *'
1309+
1310+
12751311@Type .add_type ('TS_LEVEL' , abi_type = ['ompi' ])
12761312class TypeTSLevel (Type ):
12771313
@@ -1598,7 +1634,7 @@ def type_text(self, enable_count=False):
15981634 return 'MPI_Type_copy_attr_function *'
15991635
16001636@Type .add_type ('TYPE_COPY_ATTR_FUNCTION' , abi_type = ['standard' ])
1601- class TypeTypeCopyAttrFunctionStandard (Type ):
1637+ class TypeTypeCopyAttrFunctionStandard (StandardABIType ):
16021638
16031639 def type_text (self , enable_count = False ):
16041640 type_name = self .mangle_name ('MPI_Type_copy_attr_function' )
@@ -1611,6 +1647,7 @@ def argument(self):
16111647 @property
16121648 def init_code (self ):
16131649 code = []
1650+ code = [f'MPI_Type_copy_attr_function *{ self .tmpname } = { ConvertFuncs .TYPE_COPY_ATTR_FUNCTION } ({ self .name } );' ]
16141651 code = ['ompi_abi_wrapper_helper_t *helper = NULL;' ]
16151652 code .append ('MPI_Type_copy_attr_function_ABI_INTERNAL *copy_fn;' )
16161653 code .append ('helper = ( ompi_abi_wrapper_helper_t *)malloc(sizeof(ompi_abi_wrapper_helper_t));' )
@@ -1647,7 +1684,6 @@ def callback_wrapper_code(self):
16471684 code .append (' ompi_abi_wrapper_helper_t *helper = (ompi_abi_wrapper_helper_t *)extra_state;' )
16481685 code .append (' MPI_Datatype_ABI_INTERNAL type_tmp = ompi_convert_datatype_ompi_to_standard(oldtype);' )
16491686 code .append (' return helper->user_delete_fn((MPI_Datatype_ABI_INTERNAL)type_tmp, type_keyval, attribute_val, helper->user_extra_state);' )
1650- code .append (' free(helper);' )
16511687 code .append ('}' )
16521688 return code
16531689
@@ -1659,15 +1695,15 @@ def type_text(self, enable_count=False):
16591695
16601696
16611697@Type .add_type ('TYPE_DELETE_ATTR_FUNCTION' , abi_type = ['standard' ])
1662- class TypeTypeDeleteAttrFunctionStandard (Type ):
1698+ class TypeTypeDeleteAttrFunctionStandard (StandardABIType ):
16631699
16641700 def type_text (self , enable_count = False ):
16651701 type_name = self .mangle_name ('MPI_Type_delete_attr_function' )
16661702 return f'{ type_name } *'
16671703
1668- @property
1669- def argument (self ):
1670- return f'(MPI_Type_delete_attr_function *) { self .name } '
1704+ # @property
1705+ # def argument(self):
1706+ # return f'(MPI_Type_delete_attr_function *) {self.name}'
16711707
16721708#
16731709# note the code generated here relies on that generated for
@@ -1676,6 +1712,7 @@ def argument(self):
16761712 @property
16771713 def init_code (self ):
16781714 code = []
1715+ code = [f'MPI_Type_delete_attr_function *{ self .tmpname } = { ConvertFuncs .TYPE_DELETE_ATTR_FUNCTION } ({ self .name } );' ]
16791716 code .append ('MPI_Type_delete_attr_function_ABI_INTERNAL *delete_fn;' )
16801717 code .append (f'if ({ self .name } == MPI_TYPE_NULL_DELETE_FN_ABI_INTERNAL)' + '{' )
16811718 code .append ('delete_fn = ABI_C_MPI_TYPE_NULL_DELETE_FN;' )
@@ -1709,7 +1746,7 @@ def type_text(self, enable_count=False):
17091746
17101747
17111748@Type .add_type ('WIN_COPY_ATTR_FUNCTION' , abi_type = ['standard' ])
1712- class TypeWinCopyAttrFunctionStandard (Type ):
1749+ class TypeWinCopyAttrFunctionStandard (StandardABIType ):
17131750
17141751 def type_text (self , enable_count = False ):
17151752 type_name = self .mangle_name ('MPI_Win_copy_attr_function' )
@@ -1770,7 +1807,7 @@ def type_text(self, enable_count=False):
17701807
17711808
17721809@Type .add_type ('WIN_DELETE_ATTR_FUNCTION' , abi_type = ['standard' ])
1773- class TypeWinDeleteAttrFunctionStandard (Type ):
1810+ class TypeWinDeleteAttrFunctionStandard (StandardABIType ):
17741811
17751812 def type_text (self , enable_count = False ):
17761813 type_name = self .mangle_name ('MPI_Win_delete_attr_function' )
0 commit comments