indexing description: "" legal: "See notice at end of class." status: "See notice at end of class." date: "$Date$" revision: "$Revision$" class MARSHALING_FUNCTIONS inherit SHARED_JNI_ENVIRONMENT JAVA_SIZES feature -- Type names integer_32_type_name: STRING = "java.lang.Integer" integer_64_type_name: STRING = "java.lang.Long" real_32_type_name: STRING = "java.lang.Float" real_64_type_name: STRING = "java.lang.Double" string_type_name: STRING = "java.lang.String" boolean_type_name: STRING = "java.lang.Boolean" array_of_boolean_type_name: STRING = "[Z" array_of_int_32_type_name: STRING = "[I" array_of_int_64_type_name: STRING = "[J" array_of_real_32_type_name: STRING = "[F" array_of_real_64_type_name: STRING = "[D" feature -- Marshal marshal_integer_32 (v: INTEGER_32): JAVA_OBJECT is -- Create a new java Integer from `v'. local args: JAVA_ARGS do create args.make (1) args.put_int (v, 1) Result := integer_class.object_method (integer_class.method_id ("valueOf", "(I)Ljava/lang/Integer;"), args) end marshal_integer_64 (v: INTEGER_64): JAVA_OBJECT is -- Create a new java Long from `v'. local args: JAVA_ARGS do create args.make (1) args.put_long (v, 1) Result := long_class.object_method (long_class.method_id ("valueOf", "(J)Ljava/lang/Long;"), args) end marshal_real_32 (v: REAL_32): JAVA_OBJECT is -- Create a new java Integer from `v'. local args: JAVA_ARGS do create args.make (1) args.put_float (v, 1) Result := float_class.object_method (float_class.method_id ("valueOf", "(F)Ljava/lang/Float;"), args) end marshal_real_64 (v: REAL_64): JAVA_OBJECT is -- Create a new java Integer from `v'. local args: JAVA_ARGS do create args.make (1) args.put_double (v, 1) Result := double_class.object_method (double_class.method_id ("valueOf", "(D)Ljava/lang/Double;"), args) end marshal_string (v: STRING): JAVA_OBJECT is -- Create a new java String from `v'. do if v /= Void then create Result.make_from_pointer (jni.new_string (v)) end end marshal_boolean (v: BOOLEAN): JAVA_OBJECT is -- Create a new java Boolean from `v'. local args: JAVA_ARGS do create args.make (1) args.put_boolean (v, 1) Result := boolean_class.object_method (boolean_class.method_id ("valueOf", "(Z)Ljava/lang/Boolean;"), args) end marshal_array_of_integer_32 (v: ARRAY[INTEGER_32]): JAVA_OBJECT is -- Create a new java array of int from `v'. local jvalue: JAVA_VALUE jarray, array_ptr: POINTER i, i1: INTEGER do if v /= Void then jarray := jni.new_int_array (v.count) array_ptr := jni.get_int_array_elements (jarray, default_pointer) from i := v.lower i1 := 0 until i > v.upper loop create jvalue.make_by_pointer (array_ptr + i1 * sizeof_jint) jvalue.set_int_value (v.item (i)) i := i+1 i1 := i1+1 end jni.release_int_array_elements (jarray, array_ptr, 0) create Result.make_from_pointer (jarray) end end marshal_array_of_integer_64 (v: ARRAY[INTEGER_64]): JAVA_OBJECT is -- Create a new java array of long from `v'. local jvalue: JAVA_VALUE jarray, array_ptr: POINTER i, i1: INTEGER do if v /= Void then jarray := jni.new_long_array (v.count) array_ptr := jni.get_long_array_elements (jarray, default_pointer) from i := v.lower i1 := 0 until i > v.upper loop create jvalue.make_by_pointer (array_ptr + i1 * sizeof_jlong) jvalue.set_long_value (v.item (i)) i := i+1 i1 := i1+1 end jni.release_long_array_elements (jarray, array_ptr, 0) create Result.make_from_pointer (jarray) end end marshal_array_of_real_32 (v: ARRAY[REAL_32]): JAVA_OBJECT is -- Create a new java array of float from `v'. local jvalue: JAVA_VALUE jarray, array_ptr: POINTER i, i1: INTEGER do if v /= Void then jarray := jni.new_float_array (v.count) array_ptr := jni.get_float_array_elements (jarray, default_pointer) from i := v.lower i1 := 0 until i > v.upper loop create jvalue.make_by_pointer (array_ptr + i1 * sizeof_jfloat) jvalue.set_float_value (v.item (i)) i := i+1 i1 := i1+1 end jni.release_float_array_elements (jarray, array_ptr, 0) create Result.make_from_pointer (jarray) end end marshal_array_of_real_64 (v: ARRAY[REAL_64]): JAVA_OBJECT is -- Create a new java array of double from `v'. local jvalue: JAVA_VALUE jarray, array_ptr: POINTER i, i1: INTEGER do if v /= Void then jarray := jni.new_double_array (v.count) array_ptr := jni.get_double_array_elements (jarray, default_pointer) from i := v.lower i1 := 0 until i > v.upper loop create jvalue.make_by_pointer (array_ptr + i1 * sizeof_jdouble) jvalue.set_double_value (v.item (i)) i := i+1 i1 := i1+1 end jni.release_double_array_elements (jarray, array_ptr, 0) create Result.make_from_pointer (jarray) end end marshal_array_of_boolean (v: ARRAY[BOOLEAN]): JAVA_OBJECT is -- Create a new java array of bool from `v'. local jvalue: JAVA_VALUE jarray, array_ptr: POINTER i, i1: INTEGER do if v /= Void then jarray := jni.new_boolean_array (v.count) array_ptr := jni.get_boolean_array_elements (jarray, default_pointer) from i := v.lower i1 := 0 until i > v.upper loop create jvalue.make_by_pointer (array_ptr + i1 * sizeof_jboolean) jvalue.set_boolean_value (v.item (i)) i := i+1 i1 := i1+1 end jni.release_boolean_array_elements (jarray, array_ptr, 0) create Result.make_from_pointer (jarray) end end feature -- Unmarshal unmarshal_integer_32 (v: JAVA_OBJECT): INTEGER_32 is local n: STRING do if v /= Void then n := v.jclass.name if n.is_equal (integer_32_type_name) then Result := v.integer_method (v.method_id ("intValue", "()I"), Void) end end end unmarshal_integer_64 (v: JAVA_OBJECT): INTEGER_64 is local n: STRING do if v /= Void then n := v.jclass.name if n.is_equal (integer_64_type_name) then Result := v.long_method (v.method_id ("longValue", "()J"), Void) end end end unmarshal_real_32 (v: JAVA_OBJECT): REAL_32 is local n: STRING do if v /= Void then n := v.jclass.name if n.is_equal (real_32_type_name) then Result := v.float_method (v.method_id ("floatValue", "()F"), Void) end end end unmarshal_real_64 (v: JAVA_OBJECT): REAL_64 is local n: STRING do if v /= Void then n := v.jclass.name if n.is_equal (real_64_type_name) then Result := v.double_method (v.method_id ("doubleValue", "()D"), Void) end end end unmarshal_string (v: JAVA_OBJECT): STRING is do if v /= Void then Result := jni.get_string (v.java_object_id) end end unmarshal_boolean (v: JAVA_OBJECT): BOOLEAN is local n: STRING do if v /= Void then n := v.jclass.name if n.is_equal (boolean_type_name) then Result := v.boolean_method (v.method_id ("booleanValue", "()Z"), Void) end end end unmarshal_array_of_integer_32 (v: JAVA_OBJECT): ARRAY[INTEGER_32] is local n: STRING; jvalue: JAVA_VALUE jarray, array_ptr: POINTER i, i1: INTEGER do if v /= Void then n := v.jclass.name if n.is_equal (array_of_int_32_type_name) then jarray := v.java_object_id create Result.make (1, jni.get_array_length (jarray)) array_ptr := jni.get_int_array_elements (jarray, default_pointer) from i := 0 i1 := 1 until i1 > Result.upper loop create jvalue.make_by_pointer (array_ptr + i * sizeof_jint) Result.put (jvalue.int_value, i1) i := i+1 i1 := i1+1 end jni.release_int_array_elements (jarray, array_ptr, 0) end end end unmarshal_array_of_integer_64 (v: JAVA_OBJECT): ARRAY[INTEGER_64] is local n: STRING; jvalue: JAVA_VALUE jarray, array_ptr: POINTER i, i1: INTEGER do if v /= Void then n := v.jclass.name if n.is_equal (array_of_int_64_type_name) then jarray := v.java_object_id create Result.make (1, jni.get_array_length (jarray)) array_ptr := jni.get_long_array_elements (jarray, default_pointer) from i := 0 i1 := 1 until i1 > Result.upper loop create jvalue.make_by_pointer (array_ptr + i * sizeof_jlong) Result.put (jvalue.long_value, i1) i := i+1 i1 := i1+1 end jni.release_int_array_elements (jarray, array_ptr, 0) end end end unmarshal_array_of_real_32 (v: JAVA_OBJECT): ARRAY[REAL_32] is local n: STRING; jvalue: JAVA_VALUE jarray, array_ptr: POINTER i, i1: INTEGER do if v /= Void then n := v.jclass.name if n.is_equal (array_of_real_32_type_name) then jarray := v.java_object_id create Result.make (1, jni.get_array_length (jarray)) array_ptr := jni.get_float_array_elements (jarray, default_pointer) from i := 0 i1 := 1 until i1 > Result.upper loop create jvalue.make_by_pointer (array_ptr + i * sizeof_jfloat) Result.put (jvalue.float_value, i1) i := i+1 i1 := i1+1 end jni.release_int_array_elements (jarray, array_ptr, 0) end end end unmarshal_array_of_real_64 (v: JAVA_OBJECT): ARRAY[REAL_64] is local n: STRING; jvalue: JAVA_VALUE jarray, array_ptr: POINTER i, i1: INTEGER do if v /= Void then n := v.jclass.name if n.is_equal (array_of_real_64_type_name) then jarray := v.java_object_id create Result.make (1, jni.get_array_length (jarray)) array_ptr := jni.get_double_array_elements (jarray, default_pointer) from i := 0 i1 := 1 until i1 > Result.upper loop create jvalue.make_by_pointer (array_ptr + i * sizeof_jdouble) Result.put (jvalue.double_value, i1) i := i+1 i1 := i1+1 end jni.release_int_array_elements (jarray, array_ptr, 0) end end end unmarshal_array_of_boolean (v: JAVA_OBJECT): ARRAY[BOOLEAN] is local n: STRING; jvalue: JAVA_VALUE jarray, array_ptr: POINTER i, i1: INTEGER do if v /= Void then n := v.jclass.name if n.is_equal (array_of_boolean_type_name) then jarray := v.java_object_id create Result.make (1, jni.get_array_length (jarray)) array_ptr := jni.get_boolean_array_elements (jarray, default_pointer) from i := 0 i1 := 1 until i1 > Result.upper loop create jvalue.make_by_pointer (array_ptr + i * sizeof_jboolean) Result.put (jvalue.boolean_value, i1) i := i+1 i1 := i1+1 end jni.release_boolean_array_elements (jarray, array_ptr, 0) end end end feature {NONE} -- Implementation integer_class: JAVA_CLASS is -- once Result := jni.find_class ("java/lang/Integer") end long_class: JAVA_CLASS is -- once Result := jni.find_class ("java/lang/Long") end float_class: JAVA_CLASS is -- once Result := jni.find_class ("java/lang/Float") end double_class: JAVA_CLASS is -- once Result := jni.find_class ("java/lang/Double") end boolean_class: JAVA_CLASS is -- once Result := jni.find_class ("java/lang/Boolean") end indexing library: "egigs-jni: Library for accessing the GigaSpaces platform, JNI based implementation." copyright: "Copyright (c) 2008, Eiffel Software and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" source: "[ Eiffel Software 356 Storke Road, Goleta, CA 93117 USA Telephone 805-685-1006, Fax 805-685-6869 Website http://www.eiffel.com Customer support http://support.eiffel.com ]" end