1 /*
2 * Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
3 * University Research and Technology
4 * Corporation. All rights reserved.
5 * Copyright (c) 2004-2005 The University of Tennessee and The University
6 * of Tennessee Research Foundation. All rights
7 * reserved.
8 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
9 * University of Stuttgart. All rights reserved.
10 * Copyright (c) 2004-2005 The Regents of the University of California.
11 * All rights reserved.
12 * Copyright (c) 2015 Los Alamos National Security, LLC. All rights
13 * reserved.
14 * Copyright (c) 2018 FUJITSU LIMITED. All rights reserved.
15 * $COPYRIGHT$
16 *
17 * Additional copyrights may follow
18 *
19 * $HEADER$
20 */
21
22 package mpi;
23
24 /**
25 * This class represents {@code MPI_Info}.
26 */
27 public final class Info implements Freeable, Cloneable
28 {
29 protected long handle;
30 protected static final long NULL = getNull();
31
32 /**
33 * Java binding of the MPI operation {@code MPI_INFO_CREATE}.
34 * @throws MPIException Signals that an MPI exception of some sort has occurred.
35 */
36 public Info() throws MPIException
37 {
38 MPI.check();
39 handle = create();
40 }
41
42 protected Info(long handle)
43 {
44 this.handle = handle;
45 }
46
47 private native long create();
48
49 protected static Info newEnv()
50 {
51 return new Info(getEnv());
52 }
53
54 private native static long getEnv();
55 private native static long getNull();
56
57 /**
58 * Java binding of the MPI operation {@code MPI_INFO_SET}.
59 * @param key key
60 * @param value value
61 * @throws MPIException Signals that an MPI exception of some sort has occurred.
62 */
63 public void set(String key, String value) throws MPIException
64 {
65 MPI.check();
66 set(handle, key, value);
67 }
68
69 private native void set(long handle, String key, String value)
70 throws MPIException;
71
72 /**
73 * Java binding of the MPI operation {@code MPI_INFO_GET}.
74 * @param key key
75 * @return value or {@code null} if key is not defined
76 * @throws MPIException Signals that an MPI exception of some sort has occurred.
77 */
78 public String get(String key) throws MPIException
79 {
80 MPI.check();
81 return get(handle, key);
82 }
83
84 private native String get(long handle, String key) throws MPIException;
85
86 /**
87 * Java binding of the MPI operation {@code MPI_INFO_DELETE}.
88 * @param key key
89 * @throws MPIException Signals that an MPI exception of some sort has occurred.
90 */
91 public void delete(String key) throws MPIException
92 {
93 MPI.check();
94 delete(handle, key);
95 }
96
97 private native void delete(long handle, String key) throws MPIException;
98
99 /**
100 * Java binding of the MPI operation {@code MPI_INFO_GET_NKEYS}.
101 * @return number of defined keys
102 * @throws MPIException Signals that an MPI exception of some sort has occurred.
103 */
104 public int size() throws MPIException
105 {
106 MPI.check();
107 return size(handle);
108 }
109
110 private native int size(long handle) throws MPIException;
111
112 /**
113 * Java binding of the MPI operation {@code MPI_INFO_GET_NTHKEY}.
114 * @param i key number
115 * @return key
116 * @throws MPIException Signals that an MPI exception of some sort has occurred.
117 */
118 public String getKey(int i) throws MPIException
119 {
120 MPI.check();
121 return getKey(handle, i);
122 }
123
124 private native String getKey(long handle, int i) throws MPIException;
125
126 /**
127 * Java binding of the MPI operation {@code MPI_INFO_DUP}.
128 * <p>It is recommended to use {@link #dup} instead of {@link #clone}
129 * because the last can't throw an {@link mpi.MPIException}.
130 * @return info object
131 */
132 @Override public Info clone()
133 {
134 try
135 {
136 return dup();
137 }
138 catch(MPIException e)
139 {
140 throw new RuntimeException(e.getMessage());
141 }
142 }
143
144 /**
145 * Java binding of the MPI operation {@code MPI_INFO_DUP}.
146 * @return info object
147 * @throws MPIException Signals that an MPI exception of some sort has occurred.
148 */
149 public Info dup() throws MPIException
150 {
151 MPI.check();
152 return new Info(dup(handle));
153 }
154
155 private native long dup(long handle) throws MPIException;
156
157 /**
158 * Java binding of the MPI operation {@code MPI_INFO_FREE}.
159 * @throws MPIException Signals that an MPI exception of some sort has occurred.
160 */
161 @Override public void free() throws MPIException
162 {
163 MPI.check();
164 handle = free(handle);
165 }
166
167 private native long free(long handle) throws MPIException;
168
169 /**
170 * Tests if the info object is {@code MPI_INFO_NULL} (has been freed).
171 * @return true if the info object is {@code MPI_INFO_NULL}, false otherwise.
172 */
173 public boolean isNull()
174 {
175 return isNull(handle);
176 }
177
178 private native boolean isNull(long handle);
179
180 } // Info