package com.hcarralero.toljava;
/**
* Representa a una instancia de la Máquina Virtual de TOL.
*
* @author Humberto Andrés Carralero López (hcarralero@gmail.com)
* @version 1.0
* @see com.hcarralero.toljava.TOLMachineException
*/
public class TOLMachine {
//Inicializa una instancia de TOL
private native String nativeInitTOL();
//Ejecuta código TOL
private native Object[] nativeExecute(String code);
//Ejecuta código TOL
private native Object nativeCallCode(String codeName, Object[] parameters);
//Obtiene una variable del entorno de ejecución de TOL
private native Object nativeGetVariable(String varName);
//Cambia el valor a una variable del entorno ejecución de TOL
private native Object nativeSetVariableValue(String varName, TOLLObject varValue);
//Obtiene un arreglo con todas las viariables tipo Text definidas en TOL
private native TOLVariable[] nativeGetTextVariables();
//Obtiene un arreglo con todas las viariables tipo Real definidas en TOL
private native TOLVariable[] nativeGetRealVariables();
//Obtiene un arreglo con todas las viariables tipo Date definidas en TOL
private native TOLVariable[] nativeGetDateVariables();
//Obtiene un arreglo con todas las viariables tipo Complex definidas en TOL
private native TOLVariable[] nativeGetComplexVariables();
//Obtiene un arreglo con todas las viariables tipo Matrix definidas en TOL
private native TOLVariable[] nativeGetMatrixVariables();
//Obtiene un arreglo con todas las viariables tipo VMatrix definidas en TOL
private native TOLVariable[] nativeGetVMatrixVariables();
//Obtiene un arreglo con todas las viariables tipo Polyn definidas en TOL
private native TOLVariable[] nativeGetPolynVariables();
//Obtiene un arreglo con todas las viariables tipo Polyn definidas en TOL
private native TOLVariable[] nativeGetRatioVariables();
//Obtiene un arreglo con todas las viariables tipo Code definidas en TOL
private native TOLVariable[] nativeGetCodeVariables();
//Obtiene un arreglo con todas las viariables tipo Serie definidas en TOL
private native TOLVariable[] nativeGetSerieVariables();
//Obtiene un arreglo con todas las viariables tipo TimeSet definidas en TOL
private native TOLVariable[] nativeGetTimeSetVariables();
//Obtiene un arreglo con todas las viariables tipo Set definidas en TOL
private native TOLVariable[] nativeGetSetVariables();
//Obtiene un arreglo con todos los NameBlocks definidos en TOL
private native TOLNameBlock[] nativeGetNameBlocks();
//Obtiene el valor de una serie en una fecha dada
private native Object nativeSerieGetValue(String varname, TOLDate date);
//Obtiene el valor de una serie en un índice dado
private native Object nativeSerieGetValue(String varname, int index);
//Obtiene un arreglo de Items de una serie a partir de una fecha dada
private native Object[] nativeSerieGetItems(String varname, TOLDate date, int size);
//Obtiene un arreglo de Items de una serie a partir de una posición dada
private native Object[] nativeSerieGetItems(String varname, int index, int size);
//Obtiene la primera fecha de una serie
private native Object nativeSerieGetFirstDate(String varname);
//Obtiene la última fecha de una serie
private native Object nativeSerieGetLastDate(String varname);
//Obtiene un arreglo de fechas de un TimeSet a partir de una fecha dada
private native Object[] nativeTimeSetGetDates(String varname, TOLDate date, int size);
//Obtiene la fecha previa a una dada en un TimeSet
private native Object nativeTimeSetGetPrevDate(String varname, TOLDate date);
//Obtiene la fecha siguiente a una dada en un TimeSet
private native Object nativeTimeSetGetNextDate(String varname, TOLDate date);
//Obtiene el tamaño de un Set
private native Object nativeSetGetSize(String varname);
//Obtiene el elemento de la posición index de un conjunto
private native Object nativeSetGetElement(String varname, int index);
//Obtiene todos los elementos de un conjunto como un arreglo
private native Object[] nativeSetGetElements(String varname);
/**
* Crea una instancia de la Máquina Virtual de TOL y la inicializa
*
*/
public TOLMachine() {
nativeInitTOL();
}
/**
* Inicializa la Máquina Virtual de TOL.
*
*/
public void initTOL() {
nativeInitTOL();
}
/**
* Ejecuta en la Máquina Virtual de TOL el código pasado por parámetro
*
* @param code código TOL a ejecutarse
* @return un arreglo de objetos cuyo primer elemento es el número de errores
* que se han producido tanto en la compilación como en la ejecución, el resto
* de los elementos son los mensajes generados por la Máquina Virtual de TOL,
* lo cual es variable. (Consulte la documentación de TOL para revisar el
* formato de los mensajes producidos y poder procesarlos)
*/
public Object[] execute(String code) {
return nativeExecute(code);
}
/**
* Hace una llamada a una función asignada a una variable de tipo Code
*
* @param codeName nombre de la variable tipo Code a la que se hace la llamada
* @param parameters arreglo contiendo los parámetros que se deben pasar a la
* función que se llama; cada elemento de este arreglo puede ser un objeto
* perteneciente a una clase derivada de TOLLObject o una cadena con el
* nombre de una variable definida en TOL
* @return un objeto con el valor retornado por la función que se ha invocado
* @throws com.hcarralero.toljava.TOLMachineException cuando algún parámetro no es
* correcto, el nombre de la función a invocar no se ha encontrado u ocurre alguna
* otra anomalía en la evaluación
*/
public TOLObject callCode(String codeName, Object[] parameters) throws TOLMachineException {
// String strParameters[] = new String[parameters.length];
// for (int i = 0; i < parameters.length; ++i) {
// if (parameters[i].getClass() == TOLText.class) {
// TOLText tt = (TOLText) parameters[i];
// strParameters[i] = "\"" + tt.getText() + "\"";
// } else {
// if (parameters[i].getClass() == TOLReal.class) {
// TOLReal tr = (TOLReal) parameters[i];
// strParameters[i] = "" + tr.getValue();
// } else {
// if (parameters[i].getClass() == TOLDate.class) {
// TOLDate td = (TOLDate) parameters[i];
// strParameters[i] = "y" + td.getYear() + "m" + td.getMonth() + "d" +
// td.getDay() + "h" + td.getHour() + "i" +
// td.getMinute() + "s" + td.getSecond();
// } else {
// if (parameters[i].getClass() == TOLComplex.class) {
// TOLComplex tc = (TOLComplex) parameters[i];
// double x = tc.getX();
// double y = tc.getY();
// if (y != 0) {
// strParameters[i] = "" + tc.getY() + "*i";
// }
// if (x > 0) {
// strParameters[i] += "+" + tc.getX();
// }
// if (x < 0) {
// strParameters[i] += tc.getX();
// }
// if (x == 0 && y == 0) {
// strParameters[i] += "0";
// }
// } else {
// if (parameters[i].getClass() == TOLMatrix.class) {
// TOLMatrix tm = (TOLMatrix) parameters[i];
// int rows= tm.getRows();
// int columns= tm.getColumns();
// if (rows==0||columns==0) {
// strParameters[i] = "UnknownMatrix";
// } else {
// strParameters[i] = "(";
// for (int m= 0; m