Rapport du TP2 d`Outils Informatiques

publicité
UFR IMAG
Master 2 GICAO
Rapport du TP2 d’Outils
Informatiques
Quentin Pelorson
Jules Proust
Grenoble, le 25 novembre 2011
Par ces TPs ils nous aient permis d’apprendre à utiliser certains outils,
malheureusement la nature (bétise) humaine à permis à certaine personne,
sans aucune connaissances sur le hacking, d’avoir accès aux comptes rendu
et sources des autres groupes.
Vous avez, par la suite, écrit que nous n’évaluerez pas sur la maîtrise des
outils mais sur nos comportements face aux problèmes rencontrés. Le notre
est simple :
face aux voleurs, nous rendons tout gratuit
Question 1-4-8
Code fichier SWIG
% module tp3
%{
# include " tp3 . h "
%}
const double PI ;
double pi () ;
double add_pi ( double v ) ;
void set_log ( int v ) ;
void stats () ;
typedef struct _vecteur Vecteur ;
Vecteur * Vecteur_create ( double a , double b , double c ) ;
Vecteur * Vecteur_add ( Vecteur * v1 , Vecteur * v2 ) ;
double Vecteur_elem ( Vecteur *v , int coord ) ;
char * Vecteur_str ( Vecteur * v ) ;
void Vecteur_destroy ( Vecteur * v ) ;
typedef Vecteur {
} Vecteur ;
% extend Vecteur {
Vecteur ( double a , double b , double c ) {
return Vecteur_create (a ,b , c ) ;
}
~ Vecteur () {
Vecteur_destroy ( $self ) ;
}
}
Dans ce fichier SWIG, on peut observer trois différentes parties. La partie
2
inclue entre La partie incluant différentes fonctions est destiné à python,
cette partie lui spécifie quelle fonction il peut appeler. La dernière partie est
aussi pour python mais permet une "jolie syntaxe" et de "jolies liaisons"
lors de l’appelle du type Vecteur. Il n’y a pour l’instant qu’un destructeur
et un créateur mais il esst possible d’y ajouter toutes les fonctions que vous
souhaitez !
Question 2
Nous n’avons eu à faire "que" le CMakeLists du folder "python". Ce
CMakeLists comprend un output d’un fichier .c à partir d’un fichier .py ainsi
que l’appelle à SWIG pour construire le modue nécessaire au TP.
CMakeLists du folder python
find_package ( SWIG )
Include ( UseSWIG )
add_custom_command ( OUTPUT $ { PROJECT_SOURCE_DIR }/ python /
tp3_wrap . c
COMMAND $ { SWIG_EXECUTABLE }
ARGS
- python
$ { PROJECT_SOURCE_DIR }/ python / tp3 . i )
SWIG_ADD_MODULE ( tp3 python
$ { PROJECT_SOURCE_DIR }/ python / tp3_wrap . c
$ { PROJECT_SOURCE_DIR }/ lib / tp3 . c )
Mais des erreurs parvenus nous ramenèrent à la réalité il a aussi fallut modifier le CMakeLists principal qui utilisait le compilateur gcc.
CMakeLists principal
cmake_minimum_required ( VERSION 2.6)
project ( TP3 )
set ( CMAKE_C_FLAGS " -g - Wall " )
include_directories ( $ { TP3_SOURCE_DIR }/ lib )
include_directories ( $ { TP3_SOURCE_DIR }/ python )
include_directories (/ usr / include / python2 .7)
3
add_subdirectory ( lib )
add_subdirectory ( examples )
add_subdirectory ( python )
Question 3
Afin d’éxécuter les mêmes commandes que les test1.c il nous faut appeler le module tp3 créer par SWIG et demander l’accès aux fonctions qu’il
contient.
Pour simplifier l’appel à plusieurs fonctions, il est possible d’écrire une macro
permettant d’appeler une suite de fonctions.
test1.py
import tp3
def part1 () :
print " PI = " , tp3 . PI
print " pi () = " , tp3 . pi ()
print " pi +5 = " , tp3 . add_pi (5)
tp3 . stats ()
part1 ()
tp3 . set_log (1)
part1 ()
tp3 . set_log (0)
tp3 . stats ()
Question 5
Le test2.py éxécute les mêmes commandes que le fichier test2.c grâce au
wrapp des autres fonctions contenues dans le fichier tp3.h.
test2.py
import tp3
def f () :
v1 = tp3 . Vecteur_create (1 , 2 , 3)
v2 = tp3 . Vecteur_create (4 , 5 , 6)
v = tp3 . Vecteur_add ( v1 , v2 )
tp3 . stats ()
4
val_v = tp3 . Vecteur_str ( v )
print " Vecteur v : " , val_v
tp3 . Vecteur_destroy ( v2 )
tp3 . Vecteur_destroy ( v1 )
tp3 . Vecteur_destroy ( v )
return v
tp3 . stats ()
vecteur = f ()
tp3 . stats ()
val_v = tp3 . Vecteur_str ( vecteur )
# tp3 . free ( val_v )
Nous pouvons alors observer que la construction et la destructions des vecteurs construit est bien éxécutée.
Sortie console
Nombre de Vecteur crees : 0
Nombre de Vecteur detruits : 0
Nombre de Vecteur crees : 3
Nombre de Vecteur detruits : 0
Vecteur v : [5 ,7 ,9]
Nombre de Vecteur cres : 3
Nombre de Vecteur detruits : 3
Question 6
OOOOooooohhhh la "jolie syntaxe"
"jolie syntaxe"
import tp3
v = Vecteur (3 ,4 ,0)
del v
Question 7
Les sections 5.5.1-7 peuvent vous aider à comprendre comment réaliser
des structures permettant de faire de "jolis" appels dans python. Les sections
5
6.17-18 donnent des informations complémentaires pour construire de "jolies"
choses.
6
Téléchargement