This source file includes following definitions.
- call
- call
- vCall
- vCall
- vCall
- vCall
- vCall
- vCall
- vCall
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 package mpi;
49
50 import java.nio.*;
51
52
53
54
55 public abstract class UserFunction
56 {
57
58
59
60
61
62
63
64
65 public void call(Object inVec, Object inOutVec, int count, Datatype datatype)
66 throws MPIException
67 {
68 throw new UnsupportedOperationException("Not supported yet.");
69 }
70
71
72
73
74
75
76
77
78
79 public void call(ByteBuffer in, ByteBuffer inOut, int count, Datatype datatype)
80 throws MPIException
81 {
82 switch(datatype.baseType)
83 {
84 case Datatype.BYTE:
85 vCall(in, inOut, count, datatype);
86 break;
87 case Datatype.CHAR:
88 vCall(in.asCharBuffer(), inOut.asCharBuffer(), count, datatype);
89 break;
90 case Datatype.SHORT:
91 vCall(in.asShortBuffer(), inOut.asShortBuffer(), count, datatype);
92 break;
93 case Datatype.INT:
94 vCall(in.asIntBuffer(), inOut.asIntBuffer(), count, datatype);
95 break;
96 case Datatype.LONG:
97 vCall(in.asLongBuffer(), inOut.asLongBuffer(), count, datatype);
98 break;
99 case Datatype.FLOAT:
100 vCall(in.asFloatBuffer(), inOut.asFloatBuffer(), count, datatype);
101 break;
102 case Datatype.DOUBLE:
103 vCall(in.asDoubleBuffer(), inOut.asDoubleBuffer(), count, datatype);
104 break;
105 case Datatype.PACKED:
106 vCall(in, inOut, count, datatype);
107 break;
108 default:
109 throw new IllegalArgumentException("Unsupported datatype.");
110 }
111 }
112
113 private void vCall(ByteBuffer in, ByteBuffer inOut,
114 int count, Datatype datatype) throws MPIException
115 {
116 int extent = datatype.getExtent();
117 byte[] inVec = new byte[count * extent],
118 inOutVec = new byte[count * extent];
119
120 in.get(inVec);
121 inOut.get(inOutVec);
122 call(inVec, inOutVec, count, datatype);
123 inOut.clear();
124 inOut.put(inOutVec);
125 }
126
127 private void vCall(CharBuffer inBuf, CharBuffer inOutBuf,
128 int count, Datatype datatype) throws MPIException
129 {
130 int extent = datatype.getExtent();
131 char[] inVec = new char[count * extent],
132 inOutVec = new char[count * extent];
133
134 inBuf.get(inVec);
135 inOutBuf.get(inOutVec);
136 call(inVec, inOutVec, count, datatype);
137 inOutBuf.clear();
138 inOutBuf.put(inOutVec);
139 }
140
141 private void vCall(ShortBuffer inBuf, ShortBuffer inOutBuf,
142 int count, Datatype datatype) throws MPIException
143 {
144 int extent = datatype.getExtent();
145 short[] inVec = new short[count * extent],
146 inOutVec = new short[count * extent];
147
148 inBuf.get(inVec);
149 inOutBuf.get(inOutVec);
150 call(inVec, inOutVec, count, datatype);
151 inOutBuf.clear();
152 inOutBuf.put(inOutVec);
153 }
154
155 private void vCall(IntBuffer inBuf, IntBuffer inOutBuf,
156 int count, Datatype datatype) throws MPIException
157 {
158 int extent = datatype.getExtent();
159 int[] inVec = new int[count * extent],
160 inOutVec = new int[count * extent];
161
162 inBuf.get(inVec);
163 inOutBuf.get(inOutVec);
164 call(inVec, inOutVec, count, datatype);
165 inOutBuf.clear();
166 inOutBuf.put(inOutVec);
167 }
168
169 private void vCall(LongBuffer inBuf, LongBuffer inOutBuf,
170 int count, Datatype datatype) throws MPIException
171 {
172 int extent = datatype.getExtent();
173 long[] inVec = new long[count * extent],
174 inOutVec = new long[count * extent];
175
176 inBuf.get(inVec);
177 inOutBuf.get(inOutVec);
178 call(inVec, inOutVec, count, datatype);
179 inOutBuf.clear();
180 inOutBuf.put(inOutVec);
181 }
182
183 private void vCall(FloatBuffer inBuf, FloatBuffer inOutBuf,
184 int count, Datatype datatype) throws MPIException
185 {
186 int extent = datatype.getExtent();
187 float[] inVec = new float[count * extent],
188 inOutVec = new float[count * extent];
189
190 inBuf.get(inVec);
191 inOutBuf.get(inOutVec);
192 call(inVec, inOutVec, count, datatype);
193 inOutBuf.clear();
194 inOutBuf.put(inOutVec);
195 }
196
197 private void vCall(DoubleBuffer inBuf, DoubleBuffer inOutBuf,
198 int count, Datatype datatype) throws MPIException
199 {
200 int extent = datatype.getExtent();
201 double[] inVec = new double[count * extent],
202 inOutVec = new double[count * extent];
203
204 inBuf.get(inVec);
205 inOutBuf.get(inOutVec);
206 call(inVec, inOutVec, count, datatype);
207 inOutBuf.clear();
208 inOutBuf.put(inOutVec);
209 }
210
211 }