Class StubMlabEngine
- java.lang.Object
-
- com.jstatcom.engine.mlab.StubMlabEngine
-
- All Implemented Interfaces:
- Engine
public final class StubMlabEngine extends java.lang.Object implements Engine
AMLabEnginemanages calls to methods defined in native libraries created with the MatLab compiler from .m files. It works on Win32 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.Every argument and return type is translated to a pointer to an
mxArrayobject and the call is made via themlxinterface method. The argument and return types of the function must be compatible with theJSCDataobjects defined in thecallmethod. The name of the procedure to be called is the same as specified in the MatLab .m file.
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method and Description voidcall(java.lang.String procName, JSCData[] args, JSCData[] retData)Makes a call toprocNamein the native library that was loaded before.java.lang.StringgetCurrentSysLib()Gets the system library that is currently used by this engine.static StubMlabEnginegetInstance()Returns an instance of theMLabEnginethat is a Singleton.booleanisValid(JSCTypes type)Gets whethertypecan be handled by this engine.voidload(java.lang.String module, LoadTypes loadType, JSCData... args)Sets the name of the native library to be used or loads an executable.voidshutdown()Calls termination code.voidstop()Throws an Exception, because the task cannot be stopped.
-
-
-
Method Detail
-
getInstance
public static StubMlabEngine getInstance()
Returns an instance of theMLabEnginethat is a Singleton.- Returns:
- an engine instance
- Throws:
java.lang.RuntimeException- if the native support library cannot be found
-
call
public void call(java.lang.String procName, JSCData[] args, JSCData[] retData)Makes a call toprocNamein the native library that was loaded before. It is assumed that the library was created with the MatLab compiler from an .m file. This call uses themlxinterface function. It also takes care of initialization and termination tasks.Usage Note
The name of the procedure and the input/return parameters must conform to the specification in the MatLab .m file. All input and return parameters will first be transformed to amxArray. Afterwards the return values are read back and set to the specified data objects. The datatypes must be correctly specified.Important
Because of a special initialization/termination behaviour of matlab compiled libraries with graphics, it is currently not possible to use graphics functions in shared libraries. For this purpose, theloadfunction together with theEXEload type must be used. Graphics must therefore be compiled as stand-alone applications. The data to display can be stored in a file, which can be handed over as a commandline argument. The file(s) with the data can be created in a previous call to a non graphic library.- Specified by:
callin interfaceEngine- Parameters:
procName- name of the procedure to call, must be defined in the currently loaded library, must correspond to the name in the .m file (lowercase)args- arguments for the procedureretData- return types- Throws:
java.lang.IllegalArgumentException-- if
argsorretDatacontainnullelements or unsupported types - if
retDatacontains more than 1 element -
if (procName == null || procName.length() == 0) - if an element of
argsrepresentsINT, NUMBER or STRINGbut is empty - if an element of
argsrepresentsSARRAYand containsnullstrings
- if
java.lang.RuntimeException- ifprocNameadress could not be found in the loaded libraryjava.lang.UnsatisfiedLinkError- if native support routines cannot be foundjava.lang.IllegalStateException- if no system library was loaded before
-
isValid
public boolean isValid(JSCTypes type)
Description copied from interface:EngineGets whethertypecan be handled by this engine.- Specified by:
isValidin interfaceEngine- Parameters:
type- the data type to be checked- Returns:
trueif ok,falseiftypecannot be handled by this engine- See Also:
Engine.isValid(com.jstatcom.model.JSCTypes)
-
load
public void load(java.lang.String module, LoadTypes loadType, JSCData... args)Sets the name of the native library to be used or loads an executable. The library is then used in the next call to a function.if (loadType == MLabLoadTypes.USERLIB)then the library is searched in thejmlabsubdirectory.if (loadType == MLabLoadTypes.SYSLIB)then the library is searched in the library search path.if (loadType == MLabLoadTypes.EXE)then the executable is searched in thejmlabsubdirectory and executed withargsas commandline arguments.- Specified by:
loadin interfaceEngine- Parameters:
module- the name of the system library to load without the system specific extensionloadType- the load typeargs- only used for EXE load type, must contain onlyJSCStringobjects, empty objects are treated as"", can benullfor no arguments- Throws:
java.lang.IllegalArgumentException-if (loadName == null || loadType == null)orif (module.length() == 0)or- if no user library/exectuable with that name exists in
the
jmlabsubdir or - if
EXEis specified andargscontains other types thanJSCTypes.STRINGor - if
argscontainsnullelements
java.lang.RuntimeException- if operating system is not supported or if the system library/exectuable with the given name cannot be found or if execution returned other value than 0- See Also:
Engine.load(String, com.jstatcom.engine.LoadTypes, com.jstatcom.model.JSCData[])
-
getCurrentSysLib
public java.lang.String getCurrentSysLib()
Gets the system library that is currently used by this engine. It can be changed via theloadmethod.- Returns:
- the absolute path of the current system library or null if
nonehas been loaded so far
-
stop
public void stop()
Throws an Exception, because the task cannot be stopped.- Specified by:
stopin interfaceEngine- Throws:
java.lang.UnsupportedOperationException- See Also:
Engine.stop()
-
shutdown
public void shutdown()
Calls termination code.- Specified by:
shutdownin interfaceEngine- See Also:
Engine.shutdown()
-
-
DMelt 3.0 © DataMelt by jWork.ORG