1 cananian 1.1.2.1 // INFloatDouble.java, created Fri Jan 1 11:29:34 1999 by cananian 2 cananian 1.1.2.4 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.4 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.1 package harpoon.Interpret.Quads; 5 cananian 1.1.2.1 6 cananian 1.1.2.2 import harpoon.ClassFile.HClass; 7 cananian 1.1.2.2 import harpoon.ClassFile.HMethod; 8 cananian 1.1.2.2 9 cananian 1.1.2.1 /** 10 cananian 1.1.2.1 * <code>INFloatDouble</code> provides implementations of the native methods 11 cananian 1.1.2.1 * in <code>java.lang.Float</code> and <code>java.lang.Double</code>. 12 cananian 1.1.2.1 * 13 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 14 cananian 1.2 * @version $Id: INFloatDouble.java,v 1.2 2002/02/25 21:05:46 cananian Exp $ 15 cananian 1.1.2.1 */ 16 cananian 1.1.2.6 public class INFloatDouble { 17 cananian 1.1.2.1 static final void register(StaticState ss) { 18 cananian 1.1.2.6 ss.register(intBitsToFloat(ss)); 19 cananian 1.1.2.6 ss.register(longBitsToDouble(ss)); 20 cananian 1.1.2.6 ss.register(floatToIntBits(ss)); 21 cananian 1.1.2.6 ss.register(doubleToLongBits(ss)); 22 cananian 1.1.2.5 try { 23 cananian 1.1.2.6 ss.register(valueOf0(ss)); 24 cananian 1.1.2.5 } catch (NoSuchMethodError e) { /* JDK 1.2 */ } 25 cananian 1.1.2.1 } 26 cananian 1.1.2.1 // convert int to float 27 cananian 1.1.2.6 private static final NativeMethod intBitsToFloat(StaticState ss0) { 28 cananian 1.1.2.1 final HMethod hm = 29 cananian 1.1.2.6 ss0.HCfloat.getMethod("intBitsToFloat",new HClass[]{ HClass.Int }); 30 cananian 1.1.2.1 return new NativeMethod() { 31 cananian 1.1.2.1 HMethod getMethod() { return hm; } 32 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 33 cananian 1.1.2.1 Integer i = (Integer) params[0]; 34 cananian 1.1.2.1 return new Float(Float.intBitsToFloat(i.intValue())); 35 cananian 1.1.2.1 } 36 cananian 1.1.2.1 }; 37 cananian 1.1.2.1 } 38 cananian 1.1.2.1 // convert float to int 39 cananian 1.1.2.6 private static final NativeMethod floatToIntBits(StaticState ss0) { 40 cananian 1.1.2.1 final HMethod hm = 41 cananian 1.1.2.6 ss0.HCfloat.getMethod("floatToIntBits", 42 cananian 1.1.2.6 new HClass[] { HClass.Float }); 43 cananian 1.1.2.1 return new NativeMethod() { 44 cananian 1.1.2.1 HMethod getMethod() { return hm; } 45 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 46 cananian 1.1.2.1 Float f = (Float) params[0]; 47 cananian 1.1.2.1 return new Integer(Float.floatToIntBits(f.floatValue())); 48 cananian 1.1.2.1 } 49 cananian 1.1.2.1 }; 50 cananian 1.1.2.1 } 51 cananian 1.1.2.1 // convert int to double 52 cananian 1.1.2.6 private static final NativeMethod longBitsToDouble(StaticState ss0) { 53 cananian 1.1.2.1 final HMethod hm = 54 cananian 1.1.2.6 ss0.HCdouble.getMethod("longBitsToDouble", 55 cananian 1.1.2.6 new HClass[] { HClass.Long }); 56 cananian 1.1.2.1 return new NativeMethod() { 57 cananian 1.1.2.1 HMethod getMethod() { return hm; } 58 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 59 cananian 1.1.2.1 Long l = (Long) params[0]; 60 cananian 1.1.2.1 return new Double(Double.longBitsToDouble(l.longValue())); 61 cananian 1.1.2.1 } 62 cananian 1.1.2.1 }; 63 cananian 1.1.2.1 } 64 cananian 1.1.2.1 // convert double to int 65 cananian 1.1.2.6 private static final NativeMethod doubleToLongBits(StaticState ss0) { 66 cananian 1.1.2.1 final HMethod hm = 67 cananian 1.1.2.6 ss0.HCdouble.getMethod("doubleToLongBits", 68 cananian 1.1.2.6 new HClass[] { HClass.Double }); 69 cananian 1.1.2.1 return new NativeMethod() { 70 cananian 1.1.2.1 HMethod getMethod() { return hm; } 71 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 72 cananian 1.1.2.1 Double d = (Double) params[0]; 73 cananian 1.1.2.1 return new Long(Double.doubleToLongBits(d.doubleValue())); 74 cananian 1.1.2.1 } 75 cananian 1.1.2.1 }; 76 cananian 1.1.2.1 } 77 cananian 1.1.2.3 // convert string to a double 78 cananian 1.1.2.6 private static final NativeMethod valueOf0(StaticState ss0) { 79 cananian 1.1.2.1 final HMethod hm = 80 cananian 1.1.2.6 ss0.HCdouble.getMethod("valueOf0",new HClass[]{ ss0.HCstring }); 81 cananian 1.1.2.1 return new NativeMethod() { 82 cananian 1.1.2.1 HMethod getMethod() { return hm; } 83 cananian 1.1.2.1 Object invoke(StaticState ss, Object[] params) { 84 cananian 1.1.2.1 ObjectRef obj = (ObjectRef) params[0]; 85 cananian 1.1.2.1 return Double.valueOf(ss.ref2str(obj)); 86 cananian 1.1.2.1 } 87 cananian 1.1.2.1 }; 88 cananian 1.1.2.1 } 89 cananian 1.2 }