1 /*
2 * Copyright (c) 2011,2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25 package com.apple.jobjc;
26 import com.apple.jobjc.JObjCRuntime.Width;
27 import javax.tools.annotation.GenerateNativeHeader;
28 // Auto generated by PrimitiveCoder.hs
29 // Do not edit by hand.
30 /* No native methods here, but the constants are needed in the supporting JNI code */
31 @GenerateNativeHeader
32 public abstract class PrimitiveCoder<T> extends Coder<T>{
33 public PrimitiveCoder(int ffiTypeCode, String objCEncoding, Class jclass, Class jprim){
34 super(ffiTypeCode, objCEncoding, jclass, jprim);
35 }
36 public final boolean popBoolean(NativeArgumentBuffer args){
37 return popBoolean(args.runtime, args.retValPtr);
38 }
39 public abstract boolean popBoolean(JObjCRuntime runtime, long addr);
40
41 public final void push(NativeArgumentBuffer args, boolean x){
42 push(args.runtime, args.argValuesPtr, x);
43 args.didPutArgValue(sizeof());
44 }
45 public abstract void push(JObjCRuntime runtime, long addr, boolean x);
46
47
48 public final byte popByte(NativeArgumentBuffer args){
49 return popByte(args.runtime, args.retValPtr);
50 }
51 public abstract byte popByte(JObjCRuntime runtime, long addr);
113 public final void push(NativeArgumentBuffer args, float x){
114 push(args.runtime, args.argValuesPtr, x);
115 args.didPutArgValue(sizeof());
116 }
117 public abstract void push(JObjCRuntime runtime, long addr, float x);
118
119
120 public final double popDouble(NativeArgumentBuffer args){
121 return popDouble(args.runtime, args.retValPtr);
122 }
123 public abstract double popDouble(JObjCRuntime runtime, long addr);
124
125 public final void push(NativeArgumentBuffer args, double x){
126 push(args.runtime, args.argValuesPtr, x);
127 args.didPutArgValue(sizeof());
128 }
129 public abstract void push(JObjCRuntime runtime, long addr, double x);
130
131
132 // native BOOL -> java boolean
133 /* No native methods here, but the constants are needed in the supporting JNI code */
134 @GenerateNativeHeader
135 public static final class BoolCoder extends PrimitiveCoder<Boolean>{
136 public static final BoolCoder INST = new BoolCoder();
137 public BoolCoder(){ super(FFI_SINT8, "B", Boolean.class, boolean.class); }
138 // compile time
139 @Override public void push(JObjCRuntime rt, long addr, boolean x){
140 rt.unsafe.putByte(addr, (byte) (x ? 1 : 0));
141 }
142 @Override public boolean popBoolean(JObjCRuntime rt, long addr){
143 return rt.unsafe.getByte(addr) != 0;
144 }
145 // for runtime coding
146 @Override public int sizeof(Width w){
147 return 1;
148 }
149 @Override public void push(JObjCRuntime rt, long addr, Boolean x){ push(rt, addr, (boolean) x); }
150 @Override public Boolean pop(JObjCRuntime rt, long addr){ return popBoolean(rt, addr); }
151 // proxies for mixed encoding
152
153 @Override public void push(JObjCRuntime rt, long addr, byte x){ push(rt, addr, (x != 0)); }
154 @Override public byte popByte(JObjCRuntime rt, long addr){ return ((byte)(popBoolean(rt, addr) ? 1 : 0)); }
158
159 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, (x != 0)); }
160 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)(popBoolean(rt, addr) ? 1 : 0)); }
161
162 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, (x != 0)); }
163 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)(popBoolean(rt, addr) ? 1 : 0)); }
164
165 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, (x != 0)); }
166 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)(popBoolean(rt, addr) ? 1 : 0)); }
167
168 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, (x != 0)); }
169 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)(popBoolean(rt, addr) ? 1 : 0)); }
170
171 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, (x != 0)); }
172 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)(popBoolean(rt, addr) ? 1 : 0)); }
173
174
175 }
176
177 // native schar -> java byte
178 /* No native methods here, but the constants are needed in the supporting JNI code */
179 @GenerateNativeHeader
180 public static final class SCharCoder extends PrimitiveCoder<Byte>{
181 public static final SCharCoder INST = new SCharCoder();
182 public SCharCoder(){ super(FFI_SINT8, "c", Byte.class, byte.class); }
183 // compile time
184 @Override public void push(JObjCRuntime rt, long addr, byte x){
185 rt.unsafe.putByte(addr, x);
186 }
187 @Override public byte popByte(JObjCRuntime rt, long addr){
188 return rt.unsafe.getByte(addr);
189 }
190 // for runtime coding
191 @Override public int sizeof(Width w){
192 return 1;
193 }
194 @Override public void push(JObjCRuntime rt, long addr, Byte x){ push(rt, addr, (byte) x); }
195 @Override public Byte pop(JObjCRuntime rt, long addr){ return popByte(rt, addr); }
196 // proxies for mixed encoding
197 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((byte)(x ? 1 : 0))); }
198 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popByte(rt, addr) != 0); }
199
203
204 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((byte)x)); }
205 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popByte(rt, addr)); }
206
207 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((byte)x)); }
208 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popByte(rt, addr)); }
209
210 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((byte)x)); }
211 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popByte(rt, addr)); }
212
213 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((byte)x)); }
214 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popByte(rt, addr)); }
215
216 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((byte)x)); }
217 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popByte(rt, addr)); }
218
219
220 }
221
222 // native uchar -> java byte
223 /* No native methods here, but the constants are needed in the supporting JNI code */
224 @GenerateNativeHeader
225 public static final class UCharCoder extends PrimitiveCoder<Byte>{
226 public static final UCharCoder INST = new UCharCoder();
227 public UCharCoder(){ super(FFI_UINT8, "C", Byte.class, byte.class); }
228 // compile time
229 @Override public void push(JObjCRuntime rt, long addr, byte x){
230 rt.unsafe.putByte(addr, x);
231 }
232 @Override public byte popByte(JObjCRuntime rt, long addr){
233 return rt.unsafe.getByte(addr);
234 }
235 // for runtime coding
236 @Override public int sizeof(Width w){
237 return 1;
238 }
239 @Override public void push(JObjCRuntime rt, long addr, Byte x){ push(rt, addr, (byte) x); }
240 @Override public Byte pop(JObjCRuntime rt, long addr){ return popByte(rt, addr); }
241 // proxies for mixed encoding
242 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((byte)(x ? 1 : 0))); }
243 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popByte(rt, addr) != 0); }
244
248
249 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((byte)x)); }
250 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popByte(rt, addr)); }
251
252 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((byte)x)); }
253 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popByte(rt, addr)); }
254
255 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((byte)x)); }
256 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popByte(rt, addr)); }
257
258 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((byte)x)); }
259 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popByte(rt, addr)); }
260
261 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((byte)x)); }
262 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popByte(rt, addr)); }
263
264
265 }
266
267 // native sshort -> java short
268 /* No native methods here, but the constants are needed in the supporting JNI code */
269 @GenerateNativeHeader
270 public static final class SShortCoder extends PrimitiveCoder<Short>{
271 public static final SShortCoder INST = new SShortCoder();
272 public SShortCoder(){ super(FFI_SINT16, "s", Short.class, short.class); }
273 // compile time
274 @Override public void push(JObjCRuntime rt, long addr, short x){
275 rt.unsafe.putShort(addr, (short) x);
276 }
277 @Override public short popShort(JObjCRuntime rt, long addr){
278 return rt.unsafe.getShort(addr);
279 }
280 // for runtime coding
281 @Override public int sizeof(Width w){
282 return 2;
283 }
284 @Override public void push(JObjCRuntime rt, long addr, Short x){ push(rt, addr, (short) x); }
285 @Override public Short pop(JObjCRuntime rt, long addr){ return popShort(rt, addr); }
286 // proxies for mixed encoding
287 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((short)(x ? 1 : 0))); }
288 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popShort(rt, addr) != 0); }
289
293 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((short)x)); }
294 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popShort(rt, addr)); }
295
296
297 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((short)x)); }
298 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popShort(rt, addr)); }
299
300 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((short)x)); }
301 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popShort(rt, addr)); }
302
303 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((short)x)); }
304 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popShort(rt, addr)); }
305
306 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((short)x)); }
307 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popShort(rt, addr)); }
308
309
310 }
311
312 // native ushort -> java short
313 /* No native methods here, but the constants are needed in the supporting JNI code */
314 @GenerateNativeHeader
315 public static final class UShortCoder extends PrimitiveCoder<Short>{
316 public static final UShortCoder INST = new UShortCoder();
317 public UShortCoder(){ super(FFI_UINT16, "S", Short.class, short.class); }
318 // compile time
319 @Override public void push(JObjCRuntime rt, long addr, short x){
320 rt.unsafe.putShort(addr, (short) x);
321 }
322 @Override public short popShort(JObjCRuntime rt, long addr){
323 return rt.unsafe.getShort(addr);
324 }
325 // for runtime coding
326 @Override public int sizeof(Width w){
327 return 2;
328 }
329 @Override public void push(JObjCRuntime rt, long addr, Short x){ push(rt, addr, (short) x); }
330 @Override public Short pop(JObjCRuntime rt, long addr){ return popShort(rt, addr); }
331 // proxies for mixed encoding
332 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((short)(x ? 1 : 0))); }
333 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popShort(rt, addr) != 0); }
334
338 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((short)x)); }
339 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popShort(rt, addr)); }
340
341
342 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((short)x)); }
343 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popShort(rt, addr)); }
344
345 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((short)x)); }
346 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popShort(rt, addr)); }
347
348 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((short)x)); }
349 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popShort(rt, addr)); }
350
351 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((short)x)); }
352 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popShort(rt, addr)); }
353
354
355 }
356
357 // native sint -> java int
358 /* No native methods here, but the constants are needed in the supporting JNI code */
359 @GenerateNativeHeader
360 public static final class SIntCoder extends PrimitiveCoder<Integer>{
361 public static final SIntCoder INST = new SIntCoder();
362 public SIntCoder(){ super(FFI_SINT32, "i", Integer.class, int.class); }
363 // compile time
364 @Override public void push(JObjCRuntime rt, long addr, int x){
365 rt.unsafe.putInt(addr, (int) x);
366 }
367 @Override public int popInt(JObjCRuntime rt, long addr){
368 return rt.unsafe.getInt(addr);
369 }
370 // for runtime coding
371 @Override public int sizeof(Width w){
372 return 4;
373 }
374 @Override public void push(JObjCRuntime rt, long addr, Integer x){ push(rt, addr, (int) x); }
375 @Override public Integer pop(JObjCRuntime rt, long addr){ return popInt(rt, addr); }
376 // proxies for mixed encoding
377 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((int)(x ? 1 : 0))); }
378 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popInt(rt, addr) != 0); }
379
383 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((int)x)); }
384 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popInt(rt, addr)); }
385
386 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((int)x)); }
387 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popInt(rt, addr)); }
388
389
390 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((int)x)); }
391 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popInt(rt, addr)); }
392
393 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((int)x)); }
394 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popInt(rt, addr)); }
395
396 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((int)x)); }
397 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popInt(rt, addr)); }
398
399
400 }
401
402 // native uint -> java int
403 /* No native methods here, but the constants are needed in the supporting JNI code */
404 @GenerateNativeHeader
405 public static final class UIntCoder extends PrimitiveCoder<Integer>{
406 public static final UIntCoder INST = new UIntCoder();
407 public UIntCoder(){ super(FFI_UINT32, "I", Integer.class, int.class); }
408 // compile time
409 @Override public void push(JObjCRuntime rt, long addr, int x){
410 rt.unsafe.putInt(addr, (int) x);
411 }
412 @Override public int popInt(JObjCRuntime rt, long addr){
413 return rt.unsafe.getInt(addr);
414 }
415 // for runtime coding
416 @Override public int sizeof(Width w){
417 return 4;
418 }
419 @Override public void push(JObjCRuntime rt, long addr, Integer x){ push(rt, addr, (int) x); }
420 @Override public Integer pop(JObjCRuntime rt, long addr){ return popInt(rt, addr); }
421 // proxies for mixed encoding
422 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((int)(x ? 1 : 0))); }
423 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popInt(rt, addr) != 0); }
424
428 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((int)x)); }
429 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popInt(rt, addr)); }
430
431 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((int)x)); }
432 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popInt(rt, addr)); }
433
434
435 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((int)x)); }
436 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popInt(rt, addr)); }
437
438 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((int)x)); }
439 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popInt(rt, addr)); }
440
441 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((int)x)); }
442 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popInt(rt, addr)); }
443
444
445 }
446
447 // native slong -> java long
448 /* No native methods here, but the constants are needed in the supporting JNI code */
449 @GenerateNativeHeader
450 public static final class SLongCoder extends PrimitiveCoder<Long>{
451 public static final SLongCoder INST = new SLongCoder();
452 public SLongCoder(){ super((JObjCRuntime.IS64 ? (FFI_SINT64) : (FFI_SINT32)), "l", Long.class, long.class); }
453 // compile time
454 @Override public void push(JObjCRuntime rt, long addr, long x){
455 if(JObjCRuntime.IS64){ rt.unsafe.putLong(addr, (long) x); }else{ rt.unsafe.putInt(addr, (int) x); }
456 }
457 @Override public long popLong(JObjCRuntime rt, long addr){
458 return (JObjCRuntime.IS64 ? (rt.unsafe.getLong(addr)) : (rt.unsafe.getInt(addr)));
459 }
460 // for runtime coding
461 @Override public int sizeof(Width w){
462 switch(w){
463 case W32: return 4;
464 case W64: return 8;
465
466 default: return -1;
467 }
468
469 }
479 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((long)x)); }
480 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popLong(rt, addr)); }
481
482 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((long)x)); }
483 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popLong(rt, addr)); }
484
485 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((long)x)); }
486 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popLong(rt, addr)); }
487
488
489 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((long)x)); }
490 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popLong(rt, addr)); }
491
492 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((long)x)); }
493 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popLong(rt, addr)); }
494
495
496 }
497
498 // native ulong -> java long
499 /* No native methods here, but the constants are needed in the supporting JNI code */
500 @GenerateNativeHeader
501 public static final class ULongCoder extends PrimitiveCoder<Long>{
502 public static final ULongCoder INST = new ULongCoder();
503 public ULongCoder(){ super((JObjCRuntime.IS64 ? (FFI_UINT64) : (FFI_UINT32)), "L", Long.class, long.class); }
504 // compile time
505 @Override public void push(JObjCRuntime rt, long addr, long x){
506 if(JObjCRuntime.IS64){ rt.unsafe.putLong(addr, (long) x); }else{ rt.unsafe.putInt(addr, (int) x); }
507 }
508 @Override public long popLong(JObjCRuntime rt, long addr){
509 return (JObjCRuntime.IS64 ? (rt.unsafe.getLong(addr)) : (rt.unsafe.getInt(addr)));
510 }
511 // for runtime coding
512 @Override public int sizeof(Width w){
513 switch(w){
514 case W32: return 4;
515 case W64: return 8;
516
517 default: return -1;
518 }
519
520 }
530 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((long)x)); }
531 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popLong(rt, addr)); }
532
533 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((long)x)); }
534 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popLong(rt, addr)); }
535
536 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((long)x)); }
537 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popLong(rt, addr)); }
538
539
540 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((long)x)); }
541 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popLong(rt, addr)); }
542
543 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((long)x)); }
544 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popLong(rt, addr)); }
545
546
547 }
548
549 // native slonglong -> java long
550 /* No native methods here, but the constants are needed in the supporting JNI code */
551 @GenerateNativeHeader
552 public static final class SLongLongCoder extends PrimitiveCoder<Long>{
553 public static final SLongLongCoder INST = new SLongLongCoder();
554 public SLongLongCoder(){ super(FFI_SINT64, "q", Long.class, long.class); }
555 // compile time
556 @Override public void push(JObjCRuntime rt, long addr, long x){
557 rt.unsafe.putLong(addr, (long) x);
558 }
559 @Override public long popLong(JObjCRuntime rt, long addr){
560 return rt.unsafe.getLong(addr);
561 }
562 // for runtime coding
563 @Override public int sizeof(Width w){
564 return 8;
565 }
566 @Override public void push(JObjCRuntime rt, long addr, Long x){ push(rt, addr, (long) x); }
567 @Override public Long pop(JObjCRuntime rt, long addr){ return popLong(rt, addr); }
568 // proxies for mixed encoding
569 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((long)(x ? 1 : 0))); }
570 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popLong(rt, addr) != 0); }
571
575 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((long)x)); }
576 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popLong(rt, addr)); }
577
578 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((long)x)); }
579 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popLong(rt, addr)); }
580
581 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((long)x)); }
582 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popLong(rt, addr)); }
583
584
585 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((long)x)); }
586 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popLong(rt, addr)); }
587
588 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((long)x)); }
589 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popLong(rt, addr)); }
590
591
592 }
593
594 // native ulonglong -> java long
595 /* No native methods here, but the constants are needed in the supporting JNI code */
596 @GenerateNativeHeader
597 public static final class ULongLongCoder extends PrimitiveCoder<Long>{
598 public static final ULongLongCoder INST = new ULongLongCoder();
599 public ULongLongCoder(){ super(FFI_UINT64, "Q", Long.class, long.class); }
600 // compile time
601 @Override public void push(JObjCRuntime rt, long addr, long x){
602 rt.unsafe.putLong(addr, (long) x);
603 }
604 @Override public long popLong(JObjCRuntime rt, long addr){
605 return rt.unsafe.getLong(addr);
606 }
607 // for runtime coding
608 @Override public int sizeof(Width w){
609 return 8;
610 }
611 @Override public void push(JObjCRuntime rt, long addr, Long x){ push(rt, addr, (long) x); }
612 @Override public Long pop(JObjCRuntime rt, long addr){ return popLong(rt, addr); }
613 // proxies for mixed encoding
614 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((long)(x ? 1 : 0))); }
615 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popLong(rt, addr) != 0); }
616
620 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((long)x)); }
621 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popLong(rt, addr)); }
622
623 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((long)x)); }
624 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popLong(rt, addr)); }
625
626 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((long)x)); }
627 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popLong(rt, addr)); }
628
629
630 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((long)x)); }
631 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popLong(rt, addr)); }
632
633 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((long)x)); }
634 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popLong(rt, addr)); }
635
636
637 }
638
639 // native float -> java float
640 /* No native methods here, but the constants are needed in the supporting JNI code */
641 @GenerateNativeHeader
642 public static final class FloatCoder extends PrimitiveCoder<Float>{
643 public static final FloatCoder INST = new FloatCoder();
644 public FloatCoder(){ super(FFI_FLOAT, "f", Float.class, float.class); }
645 // compile time
646 @Override public void push(JObjCRuntime rt, long addr, float x){
647 rt.unsafe.putFloat(addr, (float) x);
648 }
649 @Override public float popFloat(JObjCRuntime rt, long addr){
650 return rt.unsafe.getFloat(addr);
651 }
652 // for runtime coding
653 @Override public int sizeof(Width w){
654 return 4;
655 }
656 @Override public void push(JObjCRuntime rt, long addr, Float x){ push(rt, addr, (float) x); }
657 @Override public Float pop(JObjCRuntime rt, long addr){ return popFloat(rt, addr); }
658 // proxies for mixed encoding
659 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((float)(x ? 1 : 0))); }
660 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popFloat(rt, addr) != 0); }
661
665 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((float)x)); }
666 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popFloat(rt, addr)); }
667
668 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((float)x)); }
669 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popFloat(rt, addr)); }
670
671 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((float)x)); }
672 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popFloat(rt, addr)); }
673
674 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((float)x)); }
675 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popFloat(rt, addr)); }
676
677
678 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((float)x)); }
679 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popFloat(rt, addr)); }
680
681
682 }
683
684 // native double -> java double
685 /* No native methods here, but the constants are needed in the supporting JNI code */
686 @GenerateNativeHeader
687 public static final class DoubleCoder extends PrimitiveCoder<Double>{
688 public static final DoubleCoder INST = new DoubleCoder();
689 public DoubleCoder(){ super(FFI_DOUBLE, "d", Double.class, double.class); }
690 // compile time
691 @Override public void push(JObjCRuntime rt, long addr, double x){
692 rt.unsafe.putDouble(addr, (double) x);
693 }
694 @Override public double popDouble(JObjCRuntime rt, long addr){
695 return rt.unsafe.getDouble(addr);
696 }
697 // for runtime coding
698 @Override public int sizeof(Width w){
699 return 8;
700 }
701 @Override public void push(JObjCRuntime rt, long addr, Double x){ push(rt, addr, (double) x); }
702 @Override public Double pop(JObjCRuntime rt, long addr){ return popDouble(rt, addr); }
703 // proxies for mixed encoding
704 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((double)(x ? 1 : 0))); }
705 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popDouble(rt, addr) != 0); }
706
|
1 /*
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25 package com.apple.jobjc;
26 import com.apple.jobjc.JObjCRuntime.Width;
27 // Auto generated by PrimitiveCoder.hs
28 // Do not edit by hand.
29 public abstract class PrimitiveCoder<T> extends Coder<T>{
30 public PrimitiveCoder(int ffiTypeCode, String objCEncoding, Class jclass, Class jprim){
31 super(ffiTypeCode, objCEncoding, jclass, jprim);
32 }
33 public final boolean popBoolean(NativeArgumentBuffer args){
34 return popBoolean(args.runtime, args.retValPtr);
35 }
36 public abstract boolean popBoolean(JObjCRuntime runtime, long addr);
37
38 public final void push(NativeArgumentBuffer args, boolean x){
39 push(args.runtime, args.argValuesPtr, x);
40 args.didPutArgValue(sizeof());
41 }
42 public abstract void push(JObjCRuntime runtime, long addr, boolean x);
43
44
45 public final byte popByte(NativeArgumentBuffer args){
46 return popByte(args.runtime, args.retValPtr);
47 }
48 public abstract byte popByte(JObjCRuntime runtime, long addr);
110 public final void push(NativeArgumentBuffer args, float x){
111 push(args.runtime, args.argValuesPtr, x);
112 args.didPutArgValue(sizeof());
113 }
114 public abstract void push(JObjCRuntime runtime, long addr, float x);
115
116
117 public final double popDouble(NativeArgumentBuffer args){
118 return popDouble(args.runtime, args.retValPtr);
119 }
120 public abstract double popDouble(JObjCRuntime runtime, long addr);
121
122 public final void push(NativeArgumentBuffer args, double x){
123 push(args.runtime, args.argValuesPtr, x);
124 args.didPutArgValue(sizeof());
125 }
126 public abstract void push(JObjCRuntime runtime, long addr, double x);
127
128
129 // native BOOL -> java boolean
130 public static final class BoolCoder extends PrimitiveCoder<Boolean>{
131 public static final BoolCoder INST = new BoolCoder();
132 public BoolCoder(){ super(FFI_SINT8, "B", Boolean.class, boolean.class); }
133 // compile time
134 @Override public void push(JObjCRuntime rt, long addr, boolean x){
135 rt.unsafe.putByte(addr, (byte) (x ? 1 : 0));
136 }
137 @Override public boolean popBoolean(JObjCRuntime rt, long addr){
138 return rt.unsafe.getByte(addr) != 0;
139 }
140 // for runtime coding
141 @Override public int sizeof(Width w){
142 return 1;
143 }
144 @Override public void push(JObjCRuntime rt, long addr, Boolean x){ push(rt, addr, (boolean) x); }
145 @Override public Boolean pop(JObjCRuntime rt, long addr){ return popBoolean(rt, addr); }
146 // proxies for mixed encoding
147
148 @Override public void push(JObjCRuntime rt, long addr, byte x){ push(rt, addr, (x != 0)); }
149 @Override public byte popByte(JObjCRuntime rt, long addr){ return ((byte)(popBoolean(rt, addr) ? 1 : 0)); }
153
154 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, (x != 0)); }
155 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)(popBoolean(rt, addr) ? 1 : 0)); }
156
157 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, (x != 0)); }
158 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)(popBoolean(rt, addr) ? 1 : 0)); }
159
160 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, (x != 0)); }
161 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)(popBoolean(rt, addr) ? 1 : 0)); }
162
163 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, (x != 0)); }
164 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)(popBoolean(rt, addr) ? 1 : 0)); }
165
166 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, (x != 0)); }
167 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)(popBoolean(rt, addr) ? 1 : 0)); }
168
169
170 }
171
172 // native schar -> java byte
173 public static final class SCharCoder extends PrimitiveCoder<Byte>{
174 public static final SCharCoder INST = new SCharCoder();
175 public SCharCoder(){ super(FFI_SINT8, "c", Byte.class, byte.class); }
176 // compile time
177 @Override public void push(JObjCRuntime rt, long addr, byte x){
178 rt.unsafe.putByte(addr, x);
179 }
180 @Override public byte popByte(JObjCRuntime rt, long addr){
181 return rt.unsafe.getByte(addr);
182 }
183 // for runtime coding
184 @Override public int sizeof(Width w){
185 return 1;
186 }
187 @Override public void push(JObjCRuntime rt, long addr, Byte x){ push(rt, addr, (byte) x); }
188 @Override public Byte pop(JObjCRuntime rt, long addr){ return popByte(rt, addr); }
189 // proxies for mixed encoding
190 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((byte)(x ? 1 : 0))); }
191 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popByte(rt, addr) != 0); }
192
196
197 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((byte)x)); }
198 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popByte(rt, addr)); }
199
200 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((byte)x)); }
201 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popByte(rt, addr)); }
202
203 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((byte)x)); }
204 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popByte(rt, addr)); }
205
206 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((byte)x)); }
207 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popByte(rt, addr)); }
208
209 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((byte)x)); }
210 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popByte(rt, addr)); }
211
212
213 }
214
215 // native uchar -> java byte
216 public static final class UCharCoder extends PrimitiveCoder<Byte>{
217 public static final UCharCoder INST = new UCharCoder();
218 public UCharCoder(){ super(FFI_UINT8, "C", Byte.class, byte.class); }
219 // compile time
220 @Override public void push(JObjCRuntime rt, long addr, byte x){
221 rt.unsafe.putByte(addr, x);
222 }
223 @Override public byte popByte(JObjCRuntime rt, long addr){
224 return rt.unsafe.getByte(addr);
225 }
226 // for runtime coding
227 @Override public int sizeof(Width w){
228 return 1;
229 }
230 @Override public void push(JObjCRuntime rt, long addr, Byte x){ push(rt, addr, (byte) x); }
231 @Override public Byte pop(JObjCRuntime rt, long addr){ return popByte(rt, addr); }
232 // proxies for mixed encoding
233 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((byte)(x ? 1 : 0))); }
234 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popByte(rt, addr) != 0); }
235
239
240 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((byte)x)); }
241 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popByte(rt, addr)); }
242
243 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((byte)x)); }
244 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popByte(rt, addr)); }
245
246 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((byte)x)); }
247 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popByte(rt, addr)); }
248
249 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((byte)x)); }
250 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popByte(rt, addr)); }
251
252 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((byte)x)); }
253 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popByte(rt, addr)); }
254
255
256 }
257
258 // native sshort -> java short
259 public static final class SShortCoder extends PrimitiveCoder<Short>{
260 public static final SShortCoder INST = new SShortCoder();
261 public SShortCoder(){ super(FFI_SINT16, "s", Short.class, short.class); }
262 // compile time
263 @Override public void push(JObjCRuntime rt, long addr, short x){
264 rt.unsafe.putShort(addr, (short) x);
265 }
266 @Override public short popShort(JObjCRuntime rt, long addr){
267 return rt.unsafe.getShort(addr);
268 }
269 // for runtime coding
270 @Override public int sizeof(Width w){
271 return 2;
272 }
273 @Override public void push(JObjCRuntime rt, long addr, Short x){ push(rt, addr, (short) x); }
274 @Override public Short pop(JObjCRuntime rt, long addr){ return popShort(rt, addr); }
275 // proxies for mixed encoding
276 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((short)(x ? 1 : 0))); }
277 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popShort(rt, addr) != 0); }
278
282 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((short)x)); }
283 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popShort(rt, addr)); }
284
285
286 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((short)x)); }
287 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popShort(rt, addr)); }
288
289 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((short)x)); }
290 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popShort(rt, addr)); }
291
292 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((short)x)); }
293 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popShort(rt, addr)); }
294
295 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((short)x)); }
296 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popShort(rt, addr)); }
297
298
299 }
300
301 // native ushort -> java short
302 public static final class UShortCoder extends PrimitiveCoder<Short>{
303 public static final UShortCoder INST = new UShortCoder();
304 public UShortCoder(){ super(FFI_UINT16, "S", Short.class, short.class); }
305 // compile time
306 @Override public void push(JObjCRuntime rt, long addr, short x){
307 rt.unsafe.putShort(addr, (short) x);
308 }
309 @Override public short popShort(JObjCRuntime rt, long addr){
310 return rt.unsafe.getShort(addr);
311 }
312 // for runtime coding
313 @Override public int sizeof(Width w){
314 return 2;
315 }
316 @Override public void push(JObjCRuntime rt, long addr, Short x){ push(rt, addr, (short) x); }
317 @Override public Short pop(JObjCRuntime rt, long addr){ return popShort(rt, addr); }
318 // proxies for mixed encoding
319 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((short)(x ? 1 : 0))); }
320 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popShort(rt, addr) != 0); }
321
325 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((short)x)); }
326 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popShort(rt, addr)); }
327
328
329 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((short)x)); }
330 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popShort(rt, addr)); }
331
332 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((short)x)); }
333 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popShort(rt, addr)); }
334
335 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((short)x)); }
336 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popShort(rt, addr)); }
337
338 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((short)x)); }
339 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popShort(rt, addr)); }
340
341
342 }
343
344 // native sint -> java int
345 public static final class SIntCoder extends PrimitiveCoder<Integer>{
346 public static final SIntCoder INST = new SIntCoder();
347 public SIntCoder(){ super(FFI_SINT32, "i", Integer.class, int.class); }
348 // compile time
349 @Override public void push(JObjCRuntime rt, long addr, int x){
350 rt.unsafe.putInt(addr, (int) x);
351 }
352 @Override public int popInt(JObjCRuntime rt, long addr){
353 return rt.unsafe.getInt(addr);
354 }
355 // for runtime coding
356 @Override public int sizeof(Width w){
357 return 4;
358 }
359 @Override public void push(JObjCRuntime rt, long addr, Integer x){ push(rt, addr, (int) x); }
360 @Override public Integer pop(JObjCRuntime rt, long addr){ return popInt(rt, addr); }
361 // proxies for mixed encoding
362 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((int)(x ? 1 : 0))); }
363 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popInt(rt, addr) != 0); }
364
368 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((int)x)); }
369 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popInt(rt, addr)); }
370
371 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((int)x)); }
372 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popInt(rt, addr)); }
373
374
375 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((int)x)); }
376 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popInt(rt, addr)); }
377
378 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((int)x)); }
379 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popInt(rt, addr)); }
380
381 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((int)x)); }
382 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popInt(rt, addr)); }
383
384
385 }
386
387 // native uint -> java int
388 public static final class UIntCoder extends PrimitiveCoder<Integer>{
389 public static final UIntCoder INST = new UIntCoder();
390 public UIntCoder(){ super(FFI_UINT32, "I", Integer.class, int.class); }
391 // compile time
392 @Override public void push(JObjCRuntime rt, long addr, int x){
393 rt.unsafe.putInt(addr, (int) x);
394 }
395 @Override public int popInt(JObjCRuntime rt, long addr){
396 return rt.unsafe.getInt(addr);
397 }
398 // for runtime coding
399 @Override public int sizeof(Width w){
400 return 4;
401 }
402 @Override public void push(JObjCRuntime rt, long addr, Integer x){ push(rt, addr, (int) x); }
403 @Override public Integer pop(JObjCRuntime rt, long addr){ return popInt(rt, addr); }
404 // proxies for mixed encoding
405 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((int)(x ? 1 : 0))); }
406 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popInt(rt, addr) != 0); }
407
411 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((int)x)); }
412 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popInt(rt, addr)); }
413
414 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((int)x)); }
415 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popInt(rt, addr)); }
416
417
418 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((int)x)); }
419 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popInt(rt, addr)); }
420
421 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((int)x)); }
422 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popInt(rt, addr)); }
423
424 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((int)x)); }
425 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popInt(rt, addr)); }
426
427
428 }
429
430 // native slong -> java long
431 public static final class SLongCoder extends PrimitiveCoder<Long>{
432 public static final SLongCoder INST = new SLongCoder();
433 public SLongCoder(){ super((JObjCRuntime.IS64 ? (FFI_SINT64) : (FFI_SINT32)), "l", Long.class, long.class); }
434 // compile time
435 @Override public void push(JObjCRuntime rt, long addr, long x){
436 if(JObjCRuntime.IS64){ rt.unsafe.putLong(addr, (long) x); }else{ rt.unsafe.putInt(addr, (int) x); }
437 }
438 @Override public long popLong(JObjCRuntime rt, long addr){
439 return (JObjCRuntime.IS64 ? (rt.unsafe.getLong(addr)) : (rt.unsafe.getInt(addr)));
440 }
441 // for runtime coding
442 @Override public int sizeof(Width w){
443 switch(w){
444 case W32: return 4;
445 case W64: return 8;
446
447 default: return -1;
448 }
449
450 }
460 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((long)x)); }
461 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popLong(rt, addr)); }
462
463 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((long)x)); }
464 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popLong(rt, addr)); }
465
466 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((long)x)); }
467 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popLong(rt, addr)); }
468
469
470 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((long)x)); }
471 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popLong(rt, addr)); }
472
473 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((long)x)); }
474 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popLong(rt, addr)); }
475
476
477 }
478
479 // native ulong -> java long
480 public static final class ULongCoder extends PrimitiveCoder<Long>{
481 public static final ULongCoder INST = new ULongCoder();
482 public ULongCoder(){ super((JObjCRuntime.IS64 ? (FFI_UINT64) : (FFI_UINT32)), "L", Long.class, long.class); }
483 // compile time
484 @Override public void push(JObjCRuntime rt, long addr, long x){
485 if(JObjCRuntime.IS64){ rt.unsafe.putLong(addr, (long) x); }else{ rt.unsafe.putInt(addr, (int) x); }
486 }
487 @Override public long popLong(JObjCRuntime rt, long addr){
488 return (JObjCRuntime.IS64 ? (rt.unsafe.getLong(addr)) : (rt.unsafe.getInt(addr)));
489 }
490 // for runtime coding
491 @Override public int sizeof(Width w){
492 switch(w){
493 case W32: return 4;
494 case W64: return 8;
495
496 default: return -1;
497 }
498
499 }
509 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((long)x)); }
510 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popLong(rt, addr)); }
511
512 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((long)x)); }
513 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popLong(rt, addr)); }
514
515 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((long)x)); }
516 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popLong(rt, addr)); }
517
518
519 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((long)x)); }
520 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popLong(rt, addr)); }
521
522 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((long)x)); }
523 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popLong(rt, addr)); }
524
525
526 }
527
528 // native slonglong -> java long
529 public static final class SLongLongCoder extends PrimitiveCoder<Long>{
530 public static final SLongLongCoder INST = new SLongLongCoder();
531 public SLongLongCoder(){ super(FFI_SINT64, "q", Long.class, long.class); }
532 // compile time
533 @Override public void push(JObjCRuntime rt, long addr, long x){
534 rt.unsafe.putLong(addr, (long) x);
535 }
536 @Override public long popLong(JObjCRuntime rt, long addr){
537 return rt.unsafe.getLong(addr);
538 }
539 // for runtime coding
540 @Override public int sizeof(Width w){
541 return 8;
542 }
543 @Override public void push(JObjCRuntime rt, long addr, Long x){ push(rt, addr, (long) x); }
544 @Override public Long pop(JObjCRuntime rt, long addr){ return popLong(rt, addr); }
545 // proxies for mixed encoding
546 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((long)(x ? 1 : 0))); }
547 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popLong(rt, addr) != 0); }
548
552 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((long)x)); }
553 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popLong(rt, addr)); }
554
555 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((long)x)); }
556 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popLong(rt, addr)); }
557
558 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((long)x)); }
559 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popLong(rt, addr)); }
560
561
562 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((long)x)); }
563 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popLong(rt, addr)); }
564
565 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((long)x)); }
566 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popLong(rt, addr)); }
567
568
569 }
570
571 // native ulonglong -> java long
572 public static final class ULongLongCoder extends PrimitiveCoder<Long>{
573 public static final ULongLongCoder INST = new ULongLongCoder();
574 public ULongLongCoder(){ super(FFI_UINT64, "Q", Long.class, long.class); }
575 // compile time
576 @Override public void push(JObjCRuntime rt, long addr, long x){
577 rt.unsafe.putLong(addr, (long) x);
578 }
579 @Override public long popLong(JObjCRuntime rt, long addr){
580 return rt.unsafe.getLong(addr);
581 }
582 // for runtime coding
583 @Override public int sizeof(Width w){
584 return 8;
585 }
586 @Override public void push(JObjCRuntime rt, long addr, Long x){ push(rt, addr, (long) x); }
587 @Override public Long pop(JObjCRuntime rt, long addr){ return popLong(rt, addr); }
588 // proxies for mixed encoding
589 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((long)(x ? 1 : 0))); }
590 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popLong(rt, addr) != 0); }
591
595 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((long)x)); }
596 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popLong(rt, addr)); }
597
598 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((long)x)); }
599 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popLong(rt, addr)); }
600
601 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((long)x)); }
602 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popLong(rt, addr)); }
603
604
605 @Override public void push(JObjCRuntime rt, long addr, float x){ push(rt, addr, ((long)x)); }
606 @Override public float popFloat(JObjCRuntime rt, long addr){ return ((float)popLong(rt, addr)); }
607
608 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((long)x)); }
609 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popLong(rt, addr)); }
610
611
612 }
613
614 // native float -> java float
615 public static final class FloatCoder extends PrimitiveCoder<Float>{
616 public static final FloatCoder INST = new FloatCoder();
617 public FloatCoder(){ super(FFI_FLOAT, "f", Float.class, float.class); }
618 // compile time
619 @Override public void push(JObjCRuntime rt, long addr, float x){
620 rt.unsafe.putFloat(addr, (float) x);
621 }
622 @Override public float popFloat(JObjCRuntime rt, long addr){
623 return rt.unsafe.getFloat(addr);
624 }
625 // for runtime coding
626 @Override public int sizeof(Width w){
627 return 4;
628 }
629 @Override public void push(JObjCRuntime rt, long addr, Float x){ push(rt, addr, (float) x); }
630 @Override public Float pop(JObjCRuntime rt, long addr){ return popFloat(rt, addr); }
631 // proxies for mixed encoding
632 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((float)(x ? 1 : 0))); }
633 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popFloat(rt, addr) != 0); }
634
638 @Override public void push(JObjCRuntime rt, long addr, char x){ push(rt, addr, ((float)x)); }
639 @Override public char popChar(JObjCRuntime rt, long addr){ return ((char)popFloat(rt, addr)); }
640
641 @Override public void push(JObjCRuntime rt, long addr, short x){ push(rt, addr, ((float)x)); }
642 @Override public short popShort(JObjCRuntime rt, long addr){ return ((short)popFloat(rt, addr)); }
643
644 @Override public void push(JObjCRuntime rt, long addr, int x){ push(rt, addr, ((float)x)); }
645 @Override public int popInt(JObjCRuntime rt, long addr){ return ((int)popFloat(rt, addr)); }
646
647 @Override public void push(JObjCRuntime rt, long addr, long x){ push(rt, addr, ((float)x)); }
648 @Override public long popLong(JObjCRuntime rt, long addr){ return ((long)popFloat(rt, addr)); }
649
650
651 @Override public void push(JObjCRuntime rt, long addr, double x){ push(rt, addr, ((float)x)); }
652 @Override public double popDouble(JObjCRuntime rt, long addr){ return ((double)popFloat(rt, addr)); }
653
654
655 }
656
657 // native double -> java double
658 public static final class DoubleCoder extends PrimitiveCoder<Double>{
659 public static final DoubleCoder INST = new DoubleCoder();
660 public DoubleCoder(){ super(FFI_DOUBLE, "d", Double.class, double.class); }
661 // compile time
662 @Override public void push(JObjCRuntime rt, long addr, double x){
663 rt.unsafe.putDouble(addr, (double) x);
664 }
665 @Override public double popDouble(JObjCRuntime rt, long addr){
666 return rt.unsafe.getDouble(addr);
667 }
668 // for runtime coding
669 @Override public int sizeof(Width w){
670 return 8;
671 }
672 @Override public void push(JObjCRuntime rt, long addr, Double x){ push(rt, addr, (double) x); }
673 @Override public Double pop(JObjCRuntime rt, long addr){ return popDouble(rt, addr); }
674 // proxies for mixed encoding
675 @Override public void push(JObjCRuntime rt, long addr, boolean x){ push(rt, addr, ((double)(x ? 1 : 0))); }
676 @Override public boolean popBoolean(JObjCRuntime rt, long addr){ return (popDouble(rt, addr) != 0); }
677
|