Bonjour,

Voici mon problème, j'ai une classe Matrix qui encapsule un tableau 1D et qui possède un constructeur comme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
template<typename T>
class Matrix {
...
   public:
   Matrix(int nrow, int ncol, double* data);
...
}
et des fonctions qui utilisent cette classe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
double quelque_chose(const Matrix& mat);
et j'aimerais créer un typemap pour pouvoir directement utiliser les tableaux numpy. En m'inspirant des typemaps de numpy je suis parvenu à :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
%typemap(in,
         fragment="NumPy_Fragments")
  const Matrix< double >&
  (PyArrayObject* array=NULL, int is_new_object=0,Matrix<double> *new_mat=0 )
{
  npy_intp size[2] = { -1, -1 };
  array = obj_to_array_contiguous_allow_conversion($input, NPY_DOUBLE,
                                                   &is_new_object);
  if (!array || !require_dimensions(array, 2) ||
      !require_size(array, size, 2)) SWIG_fail;
  new_mat = new Matrix<double>((size_t) array_size(array,0),(size_t) array_size(array,1), (double*) array_data(array));
  $1 = new_mat;
}
mais il y a deux problèmes (au moins):
  1. la matrice créée n'est pas détruite (fuite de mémoire)
  2. je suis obligé de créer un typemap par type de données


Toute solution, piste, conseil seront les bienvenus.

D'avance merci,

Alexis.M