Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
convert between Fortran and C MPI_*_NULL handles
[simgrid.git] / src / smpi / bindings / smpi_pmpi_info.cpp
1 /* Copyright (c) 2007-2019. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include "private.hpp"
7 #include "smpi_info.hpp"
8
9 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(smpi_pmpi);
10
11 /* PMPI User level calls */
12
13 int PMPI_Info_create( MPI_Info *info){
14   if (info == nullptr)
15     return MPI_ERR_ARG;
16   *info = new simgrid::smpi::Info();
17   return MPI_SUCCESS;
18 }
19
20 int PMPI_Info_set( MPI_Info info, const char *key, const char *value){
21   if (info == nullptr || key == nullptr || value == nullptr)
22     return MPI_ERR_ARG;
23   info->set(key, value);
24   return MPI_SUCCESS;
25 }
26
27 int PMPI_Info_free( MPI_Info *info){
28   if (info == nullptr || *info==nullptr)
29     return MPI_ERR_ARG;
30   simgrid::smpi::Info::unref(*info);
31   *info=MPI_INFO_NULL;
32   return MPI_SUCCESS;
33 }
34
35 int PMPI_Info_get(MPI_Info info, const char *key,int valuelen, char *value, int *flag){
36   *flag=false;
37   if (info == nullptr || key == nullptr || valuelen <0)
38     return MPI_ERR_ARG;
39   if (value == nullptr)
40     return MPI_ERR_INFO_VALUE;
41   return info->get(key, valuelen, value, flag);
42 }
43
44 int PMPI_Info_dup(MPI_Info info, MPI_Info *newinfo){
45   if (info == nullptr || newinfo==nullptr)
46     return MPI_ERR_ARG;
47   *newinfo = new simgrid::smpi::Info(info);
48   return MPI_SUCCESS;
49 }
50
51 int PMPI_Info_delete(MPI_Info info, const char *key){
52   if (info == nullptr || key==nullptr)
53     return MPI_ERR_ARG;
54   return info->remove(key);
55 }
56
57 int PMPI_Info_get_nkeys( MPI_Info info, int *nkeys){
58   if (info == nullptr || nkeys==nullptr)
59     return MPI_ERR_ARG;
60   return info->get_nkeys(nkeys);
61 }
62
63 int PMPI_Info_get_nthkey( MPI_Info info, int n, char *key){
64   if (info == nullptr || key==nullptr || n<0 || n> MPI_MAX_INFO_KEY)
65     return MPI_ERR_ARG;
66   return info->get_nthkey(n, key);
67 }
68
69 int PMPI_Info_get_valuelen( MPI_Info info, const char *key, int *valuelen, int *flag){
70   *flag=false;
71   if (info == nullptr || key == nullptr || valuelen==nullptr)
72     return MPI_ERR_ARG;
73   return info->get_valuelen(key, valuelen, flag);
74 }
75
76 MPI_Info PMPI_Info_f2c(MPI_Fint info){
77   if(info==-1)
78     return MPI_INFO_NULL;
79   return static_cast<MPI_Info>(simgrid::smpi::Info::f2c(info));
80 }
81
82 MPI_Fint PMPI_Info_c2f(MPI_Info info){
83   if(info==MPI_INFO_NULL)
84     return -1;
85   return info->c2f();
86 }