Skip to content

Commit 31a6b0c

Browse files
committed
support INOUT attribute for all handles
thanks to dalcinl for help here Signed-off-by: Howard Pritchard <[email protected]>
1 parent b1e7646 commit 31a6b0c

File tree

6 files changed

+115
-13
lines changed

6 files changed

+115
-13
lines changed

ompi/mpi/bindings/ompi_bindings/c_type.py

Lines changed: 110 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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'])
483488
class 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'])
542566
class 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'])
791842
class 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'])
837913
class 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'])
13301406
class 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'])
20252127
class 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):

ompi/mpi/c/comm_free.c.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#include "ompi/errhandler/errhandler.h"
2929
#include "ompi/memchecker.h"
3030

31-
PROTOTYPE ERROR_CLASS comm_free(COMM_OUT comm)
31+
PROTOTYPE ERROR_CLASS comm_free(COMM_INOUT comm)
3232
{
3333
int ret;
3434

ompi/mpi/c/group_free.c.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
#include "ompi/errhandler/errhandler.h"
3030
#include "ompi/group/group.h"
3131

32-
PROTOTYPE ERROR_CLASS group_free(GROUP_OUT group)
32+
PROTOTYPE ERROR_CLASS group_free(GROUP_INOUT group)
3333
{
3434
int ret;
3535

ompi/mpi/c/type_commit.c.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#include "ompi/datatype/ompi_datatype.h"
3131
#include "ompi/memchecker.h"
3232

33-
PROTOTYPE ERROR_CLASS type_commit(DATATYPE_OUT type)
33+
PROTOTYPE ERROR_CLASS type_commit(DATATYPE_INOUT type)
3434
{
3535
int rc;
3636

ompi/mpi/c/type_free.c.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#include "ompi/datatype/ompi_datatype.h"
3131
#include "ompi/memchecker.h"
3232

33-
PROTOTYPE ERROR_CLASS type_free(DATATYPE_OUT type)
33+
PROTOTYPE ERROR_CLASS type_free(DATATYPE_INOUT type)
3434
{
3535
int rc;
3636

ompi/mpi/c/win_free.c.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#include "ompi/errhandler/errhandler.h"
2929
#include "ompi/win/win.h"
3030

31-
PROTOTYPE ERROR_CLASS win_free(WIN_OUT win)
31+
PROTOTYPE ERROR_CLASS win_free(WIN_INOUT win)
3232
{
3333
int ret;
3434

0 commit comments

Comments
 (0)