class JAVA_ARGS
Argument list for calls to Java methods
note
description: "Argument list for calls to Java methods"
legal: "See notice at end of class."
status: "See notice at end of class."
class JAVA_ARGS
inherit
SHARED_JNI_ENVIRONMENT
create
make
feature {NONE} -- Initialization
make (nb: INTEGER)
-- Make an argument list for at most `nb' arguments.
-- MODIFICATION
-- require
-- nb_at_least_one: nb >= 1
do
count := nb
create jvalue.make
create java_args_array.make (jvalue.structure_size * nb)
ensure
count_set: count = nb
end
feature -- Access
count: INTEGER
-- Number of items in Current argument list.
item (index: INTEGER): JAVA_VALUE
-- Associated java value at position `i'.
require
valid_index: valid_index (index)
do
create Result.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
ensure
item_not_void: Result /= Void
end
feature -- Element change
put_double (value: DOUBLE; index: INTEGER)
-- Add a "double" argument at position `index'.
require
valid_index: valid_index (index)
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
jvalue.set_double_value (value)
ensure
inserted: item (index).double_value = value
end
put_float (value: REAL; index: INTEGER)
-- Add a "float" argument at position `index'.
require
valid_index: valid_index (index)
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
jvalue.set_float_value (value)
ensure
inserted: item (index).float_value = value
end
put_boolean (value: BOOLEAN; index: INTEGER)
-- Add a "boolean" argument at position `index'.
require
valid_index: valid_index (index)
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
jvalue.set_boolean_value (value)
ensure
inserted: item (index).boolean_value = value
end
put_byte (value: INTEGER_8; index: INTEGER)
-- Add a "byte" argument at position `index'.
require
valid_index: valid_index (index)
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
jvalue.set_byte_value (value)
ensure
inserted: item (index).byte_value = value
end
put_char (value: CHARACTER; index: INTEGER)
-- Add a "character" argument at position `index'.
require
valid_index: valid_index (index)
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
jvalue.set_char_value (value)
ensure
inserted: item (index).char_value = value
end
put_short (value: INTEGER_16; index: INTEGER)
-- Add a "short" argument at position `index'.
require
valid_index: valid_index (index)
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
jvalue.set_short_value (value)
ensure
inserted: item (index).short_value = value
end
put_int (value: INTEGER; index: INTEGER)
-- Add "integer" argument at position `index'.
require
valid_index: valid_index (index)
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
jvalue.set_int_value (value)
ensure
inserted: item (index).int_value = value
end
put_long (value: INTEGER_64; index: INTEGER)
-- Add "long" argument at position `index'.
require
valid_index: valid_index (index)
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
jvalue.set_long_value (value)
ensure
inserted: item (index).long_value = value
end
put_string (value: detachable STRING; index: INTEGER)
-- Add "string" argument at position `index'.
require
valid_index: valid_index (index)
local
l_str: POINTER
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
l_str := jni.new_string (value)
jvalue.set_object_value (l_str)
ensure
not_void_inserted:
value /= Void implies jni.get_string (item (index).object_value).is_equal (value)
void_inserted:
value = Void implies item (index).object_value = default_pointer
end
put_object (value: detachable JAVA_OBJECT; index: INTEGER)
-- Add an "object" argument at position `index'.
-- Void `value' means a null value for Java.
require
valid_index: valid_index (index)
local
null: POINTER
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
if value /= Void then
jvalue.set_object_value (value.java_object_id)
else
jvalue.set_object_value (null)
end
ensure
not_void_inserted:
value /= Void implies item (index).object_value = value.java_object_id
void_inserted:
value = Void implies item (index).object_value = default_pointer
end
put_array (value: detachable JAVA_ARRAY; index: INTEGER)
-- Add a "array" argument at position `index'.
-- Void `value' means a null value for Java.
require
valid_index: valid_index (index)
local
null: POINTER
do
jvalue.make_by_pointer (java_args_array.item + (index - 1) * sizeof_jvalue)
if value /= Void then
jvalue.set_object_value (value.jarray)
else
jvalue.set_object_value (null)
end
ensure
not_void_inserted: value /= Void implies item (index).object_value = value.jarray
void_inserted: value = Void implies item (index).object_value = default_pointer
end
feature -- Status report
valid_index (i: INTEGER): BOOLEAN
-- Is `i' a valid index for Current.
do
Result := 0 < i and i <= count
end
feature {JAVA_OBJECT, JAVA_CLASS}
to_c: POINTER
-- Return the pointer to the arg array that can be passed
-- to JNI/Java calls
do
-- MODIFICATION
if count >= 1 then
Result := java_args_array.item
end
end
feature {NONE} -- Implementation
jvalue: JAVA_VALUE
-- Hold a `jvalue' location.
java_args_array: MANAGED_POINTER
-- pointer to the Java array representing the arguments
feature {NONE} -- externals
sizeof_jvalue: INTEGER
external
"C macro use %"jni.h%""
alias
"sizeof(jvalue)"
end
invariant
java_args_array_not_void: java_args_array /= Void
-- MODIFICATION
-- count_at_least_one: count >= 1
note
copyright: "Copyright (c) 1984-2009, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
source: "[
Eiffel Software
5949 Hollister Ave., Goleta, CA 93117 USA
Telephone 805-685-1006, Fax 805-685-6869
Website http://www.eiffel.com
Customer support http://support.eiffel.com
]"
end