|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.jstatcom.engine.stub.StubEngine
public final class StubEngine
A StubEngine
manages calls to methods defined in arbitrary
system libraries. It works on Win32, Linux (i386), and Solaris. It uses the
"Shared Stubs" example by Sheng Liang to dispatch method calls without the
need to create a distinguished JNI wrapper for every library to be used.
The methods defined in the system library can take certain types as arguments
and returns, which are
The argument and return types must be compatible with the
JSCData
objects defined in the call
method.
Method Summary | |
---|---|
void |
call(java.lang.String procName,
JSCData[] args,
JSCData[] retData)
Makes a call to procName in the native library that was
loaded before. |
java.lang.String |
getCurrentSysLib()
Gets the system library that is currently used by this engine. |
static StubEngine |
getInstance()
Returns an instance of the StubEngine that is a Singleton. |
boolean |
isValid(JSCTypes type)
Gets whether type can be handled by this engine. |
void |
load(java.lang.String module,
LoadTypes loadType,
JSCData... args)
Sets the name of the native library to be used. |
void |
shutdown()
Does nothing. |
void |
stop()
Throws an Exception, because the task cannot be stopped. |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Method Detail |
---|
public static StubEngine getInstance()
StubEngine
that is a Singleton.
public void call(java.lang.String procName, JSCData[] args, JSCData[] retData)
procName
in the native library that was
loaded before. The method signature is created from the specified input
and return parameters. The CSignTypes
can be used to set
certain properties (FLOAT, VECTOR, BYREF) on the corresponding data
objects. This can be used to conform to a wide range of different method
signatures. The following C-types correspond to JSCTypes
:
double - JSCNumber
float - JSCNumber
with FLOAT == true
int - JSCInt
&double - JSCNumber
with
BYREF == true
&float - JSCNumber
with
FLOAT == true && BYREF == true
&int - JSCInt
with BYREF == true
char* - JSCString
char** - JSCSArray
with VECTOR == true
char*** - JSCSArray
with VECTOR == false
double* - JSCNArray
with VECTOR == true
double** - JSCSNrray
with
VECTOR == false
float* - JSCNArray
with
VECTOR == true && FLOAT == true
float** - JSCSNrray
with
VECTOR == false && FLOAT == true
Input specification
If a type corresponds to a C-pointer type (instead of a value), then the
memory is allocated according to the rows and columns of the respective
JSCData
object. All input arguments are filled with the
values of the corresponding pointers after the procedure call, which
means that it is possible to use an argument that holds the results.
Value arguments must not be empty.
Return specification
If retData == null
or has zero length, then the procedure
is assumed to return void
. If the return type
(retData[0].tpye()) is a pointer type, then it is assumed, that the
returned pointer from the procedure call has the same dimensions as
retData[0]
, because is not possible to retrieve the size
from the returned pointer.
Vectors
Often C-functions have input arguments that correspond to a one
dimensional array. To call functions with these types, the vector
property of JSCSArray
and JSCNArray
must be
set to true
. The data object is then vectorized (similar
to UMatrix.vec
). After the function call the pointer is
indirected to the data object again, the array elements are filled with
the values from the pointer columnwise, keeping the original array
dimension.
call
in interface Engine
procName
- name of the procedure to call, must be defined in the
currently loaded libraryargs
- arguments for the procedure, the method signature is derived
from itretData
- return type, can contain at most 1 element, void
if empty or null
, if type is an array, it has
to be set to the rows and cols of the returned pointer
java.lang.IllegalArgumentException
- args
or retData
contain
null
elements or unsupported types
retData
contains more than 1 element
if (procName == null || procName.length() == 0)
args
represents
INT, NUMBER or STRING
but is empty and
BYREF == false
args
represents
SARRAY
and contains null
strings
java.lang.RuntimeException
- if procName
adress could not be found in the
loaded library
java.lang.IllegalStateException
- if no system library was loaded beforepublic boolean isValid(JSCTypes type)
Engine
type
can be handled by this engine.
isValid
in interface Engine
type
- the data type to be checked
true
if ok, false
if
type
cannot be handled by this engineEngine.isValid(com.jstatcom.model.JSCTypes)
public void load(java.lang.String module, LoadTypes loadType, JSCData... args)
Usage Note:
if (loadType == StubLoadTypes.USERLIB)
then the library is
searched in the jstub
subdirectory. No system specific
extension (.dll/.so) is required but will be appended automatically
according to the running OS.
if (loadType == StubLoadTypes.SYSLIB)
then the library is
searched in the library search path. The library name must be fully
qualified with extension, because not all system libraries have a default
suffix (e.g. libc.so.6).
load
in interface Engine
module
- the name of the system library to load with/without the system
specific extension (SYSLIB/USERLIB)loadType
- the load typeargs
- always ignored
java.lang.IllegalArgumentException
- if (loadName == null || loadType == null)
or
if (module.length() == 0)
or if no user
library with that name exists in the jstub
subdir
java.lang.RuntimeException
- if operating system is not supported or if the system library
with the given name cannot be foundEngine.load(String,
com.jstatcom.engine.LoadTypes, com.jstatcom.model.JSCData[])
public java.lang.String getCurrentSysLib()
load
method.
none
has been loaded so farpublic void stop()
stop
in interface Engine
java.lang.UnsupportedOperationException
Engine.stop()
public void shutdown()
shutdown
in interface Engine
Engine.shutdown()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |