Rien

Modifs
- MTK:
- Mise au point d'une procédure automatique pour la gestion mémoire des matrices et vecteurs. Celle-ci consite en la réécriture de la classe WithCheckRef (objets avec compteurs de référence). J'ai uniformisé toutes les routines de MTK. Reste à faire tous le code Metafor utilisant des matrices/vecteurs
- Ajout de FATAL_ERROR lors de l'addition, soustraction, etc de vecteurs de tailles différentes.
- Nettoyage du code.
- Suppression définitive des routines non utilisées (à suivre...).
Procédure de gestion de mémoire pour les matrices/vecteurs
Cette manière de gérer la mémoire doit être connue non seulement par le développeur de oeMTK mais aussi l'utilisateur des classes Matrix, Vector, etc (sous peine de voir apparaitre soit des mem leaks, soit des gros plantages). C'est malheureusement le prix à payer pour pouvoir bénéficier des opérateurs mathématiques surdéfinis.
Principe:
- Dans une fonction, chaque référence récupérée vers une matrice/un vecteur doit être accaparée avant utilisation par l'utilisation de incRef(). Ceci permet d'éviter que la variable ne soit détruite par une autre fonction si on la passe en argument.
- Lors de la sortie de la fonction, chaque référence accaparée doit être relachée par un decRef(). Ce decRef() se chargera d'appeler le destructeur si la variable doit être détruite.
- Si on recoit une référence par retour de fonction, la procédure s'applique également (incRef avant utilisation, puis decRef lorsqu'on n'en a plus besoin)
- Si on veut renvoyer une objet par retour de fonction (return objet), il faut préalablement libéréer la référence par objet.setReturn().
Ca peut paraitre compliqué mais c'est systématique.
NB:
- Un vecteur ou une matrice doit ne peut jamais être passée "const" puisque la routine va toucher à son compteur de référence.
- Si une fonction recoit une référence vers une matrice et ne fait que la transmettre à une autre fonction, il est inutile d'incrémenter/décrémenter le compteur.
- Si vous ne pigez pas comment qq chose marche, demandez-moi : j ai (enfin) les idées claires sur le sujet.
Ce que j'aimerais faire à moyen terme
- Séparer les solveurs des classes mathématiques (Skyline et Gauss)
- Séparer les classes utilisant le vecteur "a" de celles qui ne l'utilisent pas.
- Utiliser des std::vector<> ou std::valarray pour les tableaux de stockage.
- Rendre l'opérateur [] protégé.
- Ne plus retourner une référence par l'opérateur (i,j) - faire un setValue(i,j) pour la modification de valeurs
- Réécrire les routines en C++ pour plus de lisibilité (éviter les amas de déclarations en début de chaque routine)
- Comprendre pourquoi certaines opérations simples (genre A+B) utilisent parfois un vecteur temporaire qui me semble inutile
- Regarder de plus près le "transfert de stock". Le remplacer par un Recycler<> (déjà utilisé pour la création de la topologie)
- Supprimer les solveurs itératifs qui semblent pourris (et les remplacer par des solveurs du net)
Modifs
- Modification des appels utilisant des "const Vector" (ceux-ci ne permettent pas de modifier le compteur de référence et donc de supprimer d'éventuels objets temporaires. Ceci pourra être amélioré lorsque le compteur sera déclaré "mutable"