src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 33,62 **** import com.apple.jobjc.PrimitiveCoder.FloatCoder; import com.apple.jobjc.PrimitiveCoder.SCharCoder; import com.apple.jobjc.PrimitiveCoder.SIntCoder; import com.apple.jobjc.PrimitiveCoder.SLongLongCoder; import com.apple.jobjc.PrimitiveCoder.SShortCoder; ! import javax.tools.annotation.GenerateNativeHeader; public abstract class Coder<T> { private static native long getNativeFFITypePtrForCode(final int code); ! static final int FFI_VOID = 0; ! static final int FFI_PTR = FFI_VOID+1; ! static final int FFI_SINT8 = FFI_PTR+1; ! static final int FFI_UINT8 = FFI_SINT8+1; ! static final int FFI_SINT16 = FFI_UINT8+1; ! static final int FFI_UINT16 = FFI_SINT16+1; ! static final int FFI_SINT32 = FFI_UINT16+1; ! static final int FFI_UINT32 = FFI_SINT32+1; ! static final int FFI_SINT64 = FFI_UINT32+1; ! static final int FFI_UINT64 = FFI_SINT64+1; ! ! static final int FFI_FLOAT = FFI_UINT64+1; ! static final int FFI_DOUBLE = FFI_FLOAT+1; ! static final int FFI_LONGDOUBLE = FFI_DOUBLE+1; private static long[] ffiCodesToFFITypePtrs; static{ System.loadLibrary("JObjC"); ffiCodesToFFITypePtrs = new long[FFI_LONGDOUBLE + 1]; --- 33,62 ---- import com.apple.jobjc.PrimitiveCoder.FloatCoder; import com.apple.jobjc.PrimitiveCoder.SCharCoder; import com.apple.jobjc.PrimitiveCoder.SIntCoder; import com.apple.jobjc.PrimitiveCoder.SLongLongCoder; import com.apple.jobjc.PrimitiveCoder.SShortCoder; ! import java.lang.annotation.Native; public abstract class Coder<T> { private static native long getNativeFFITypePtrForCode(final int code); ! @Native static final int FFI_VOID = 0; ! @Native static final int FFI_PTR = FFI_VOID+1; ! @Native static final int FFI_SINT8 = FFI_PTR+1; ! @Native static final int FFI_UINT8 = FFI_SINT8+1; ! @Native static final int FFI_SINT16 = FFI_UINT8+1; ! @Native static final int FFI_UINT16 = FFI_SINT16+1; ! @Native static final int FFI_SINT32 = FFI_UINT16+1; ! @Native static final int FFI_UINT32 = FFI_SINT32+1; ! @Native static final int FFI_SINT64 = FFI_UINT32+1; ! @Native static final int FFI_UINT64 = FFI_SINT64+1; ! ! @Native static final int FFI_FLOAT = FFI_UINT64+1; ! @Native static final int FFI_DOUBLE = FFI_FLOAT+1; ! @Native static final int FFI_LONGDOUBLE = FFI_DOUBLE+1; private static long[] ffiCodesToFFITypePtrs; static{ System.loadLibrary("JObjC"); ffiCodesToFFITypePtrs = new long[FFI_LONGDOUBLE + 1];
*** 141,172 **** return getCoderAtRuntimeForType(inst.getClass()); } // - /* No native methods here, but the constants are needed in the supporting JNI code */ - @GenerateNativeHeader public static final class VoidCoder extends Coder<Object>{ public static final VoidCoder INST = new VoidCoder(); public VoidCoder(){ super(FFI_VOID, "v", Void.class, void.class); } @Override public int sizeof(Width w) { return -1; } @Override public Object pop(JObjCRuntime runtime, long addr) { throw new RuntimeException("Trying to pop a Void."); } @Override public void push(JObjCRuntime runtime, long addr, Object x) { throw new RuntimeException("Trying to push a Void."); } } - /* No native methods here, but the constants are needed in the supporting JNI code */ - @GenerateNativeHeader public static final class UnknownCoder extends Coder<Object> { public static final UnknownCoder INST = new UnknownCoder(); public UnknownCoder(){ super(-1, "?", null, null); } @Override public int sizeof(Width w) { return -1; } @Override public void push(JObjCRuntime runtime, long addr, Object x) { throw new RuntimeException("Coder not implemented");} @Override public Object pop(JObjCRuntime runtime, long addr) { throw new RuntimeException("Coder not implemented"); } } - /* No native methods here, but the constants are needed in the supporting JNI code */ - @GenerateNativeHeader public static final class PrimitivePointerCoder extends Coder<Long> { public static final PrimitivePointerCoder INST = new PrimitivePointerCoder(); public PrimitivePointerCoder(){ super(Coder.FFI_PTR, "^?", Long.class, long.class); } @Override public int sizeof(Width w) { return JObjCRuntime.PTR_LEN; } --- 141,166 ----
*** 192,203 **** @Override public Long pop(JObjCRuntime runtime, long addr) { return popPtr(runtime, addr); } @Override public void push(JObjCRuntime runtime, long addr, Long x) { push(runtime, addr, (long) x); } } - /* No native methods here, but the constants are needed in the supporting JNI code */ - @GenerateNativeHeader public static final class PointerCoder extends Coder<Pointer> { public static final PointerCoder INST = new PointerCoder(); public PointerCoder(){ super(FFI_PTR, "^?", Pointer.class); } @Override public int sizeof(Width w) { return PrimitivePointerCoder.INST.sizeof(w); } --- 186,195 ----
*** 207,218 **** @Override public void push(JObjCRuntime runtime, long addr, Pointer x) { PrimitivePointerCoder.INST.push(runtime, addr, x == null ? 0 : x.ptr); } } - /* No native methods here, but the constants are needed in the supporting JNI code */ - @GenerateNativeHeader public static final class SELCoder extends Coder<SEL> { public static final SELCoder INST = new SELCoder(); public SELCoder(){ super(FFI_PTR, ":", SEL.class); } @Override public int sizeof(Width w) { return PrimitivePointerCoder.INST.sizeof(w); } --- 199,208 ----
*** 222,233 **** @Override public SEL pop(JObjCRuntime runtime, long addr) { return new SEL(PrimitivePointerCoder.INST.popPtr(runtime, addr)); } } - /* No native methods here, but the constants are needed in the supporting JNI code */ - @GenerateNativeHeader public static abstract class StructCoder extends Coder<Struct> { private final FFIType ffiType; final int sizeof; public StructCoder(final int sizeof, final Coder... elementCoders){ --- 212,221 ----
*** 265,276 **** runtime.unsafe.copyMemory(addr, s.raw.bufferPtr, sizeof); return s; } } - /* No native methods here, but the constants are needed in the supporting JNI code */ - @GenerateNativeHeader public static final class IDCoder extends Coder<ID>{ public static final IDCoder INST = new IDCoder(); public IDCoder(){ super(FFI_PTR, "@", ID.class); } @Override public int sizeof(Width w) { return PrimitivePointerCoder.INST.sizeof(w); } --- 253,262 ----
*** 285,296 **** @Override public void push(final JObjCRuntime runtime, final long addr, final ID x) { PointerCoder.INST.push(runtime, addr, x); } } - /* No native methods here, but the constants are needed in the supporting JNI code */ - @GenerateNativeHeader public static final class NSClassCoder extends Coder<NSClass>{ public static final NSClassCoder INST = new NSClassCoder(); public NSClassCoder(){ super(FFI_PTR, "#", NSClass.class); } @Override public int sizeof(Width w) { return PrimitivePointerCoder.INST.sizeof(w); } --- 271,280 ----