Come ho fatto per il linguaggio Python, scrivero' per prime alcune funzioni in Java finalizzate al recupero di valori di costanti matematiche o astronomiche di rilievo (pi greco, numero di secondi in un giorno, gradi per radiante.
Le funzioni del toolkit che consentono queste operazioni sono le seguenti, con la loro signature completa:
SpiceDouble pi_c ( void ) SpiceDouble spd_c ( void ) SpiceDouble dpr_c ( void )
Nel file CSpice.java introdurro' le seguenti modifiche:
import com.sun.jna.*; import com.sun.jna.ptr.*; public class CSpice { private static CLibrary INSTANCE; static { INSTANCE = Native.load("cspice", CLibrary.class); } public interface CLibrary extends Library { double pi_c(); double spd_c(); double dpr_c(); void furnsh_c(String s); void unload_c(String s); } public double pi_c() { return INSTANCE.pi_c(); } public double spd_c() { return INSTANCE.spd_c(); } public double dpr_c() { return INSTANCE.dpr_c(); } }
Nell'interface ho definito le funzioni traducendo i tipi di variabili SpaceDouble del toolkit nel tipo double di Java e il tipo void del parametro delle funzioni in uno spazio vuoto. In questo caso il marshalling è particolarmente semplice. La stesura effettiva delle funzioni relative è appena poco più estesa: le funzioni prima dichiarate diventano metodi della INSTANCE della libreria nativa cspice.
Per finire modifichiamo opportunamente la classe Main.java per estrarre i valori delle costanti dichiarate tramite i metodi associati:
public class Main { public static void main(String[] args) { CSpice spice = new CSpice(); System.out.println("Valore di Pi greco: " + spice.pi_c()); System.out.println("Secondi in un giorno: " + spice.spd_c()); System.out.println("Numero di gradi per radiante: " + spice.dpr_c()); } }
A questo punto ricompiliamo il tutto:
ubuntu@ubuntu-desktop:~/Scrivania/CSpice$ javac -classpath .:jna-5.2.0.jar -g Main.java ubuntu@ubuntu-desktop:~/Scrivania/CSpice$ java -classpath .:jna-5.2.0.jar Main Valore di Pi greco: 3.141592653589793 Secondi in un giorno: 86400.0 Numero di gradi per radiante: 57.29577951308232 ubuntu@ubuntu-desktop:~/Scrivania/CSpice$
Come è facile vedere, il risultato è perfettamente corrispondente a quello atteso. Il più è fatto. Da qui in poi estenderemo le funzioni usate fino a riprodurre quanto abbiamo già realizzato con il linguaggio python. Nel post successivo iniziamo a definire funzioni un po' più complesse
No comments:
Post a Comment