Amélioration de l'interface des matrices de MTK: l'idée est de donner un bon gros coup de balai dans la gestion des matrices pour alléger l'interface et la rendre cohérante.
Quelques problèmes en vrac :
noms trop court des variables internes (a, n, m, etc).
plusieurs manières d'accéder aux valeurs : operator(i,j), operator(i),operator[i], operator[] + accès par [], etc
absence d'une interface "const"
le plus grave: le stockage des valeurs et pointeurs est défini dans MatrixBase et certaines fonctions de celle-ci manipulent les données directement (sans appeler un opérateur d'accès virtuel). Or, le stockage diffère dans les classes dérivées (pas de "a" dans un Vector, pas de stock dans un StrVector, etc). Bref, il est très facile de faire planter le truc.
La solution:
MatrixBase ne définit plus aucun stockage (même si cela nécessite parfois des couper-coller pour le moment dans les classes dérivées). Toutes les opérations matricielles définies à ce niveau sont génériques et utilisent un opérateur virtuel operator(i,j). Elles sont donc très lentes. Elles sont appelées uniquement quand un opérateur optimisé n'est pas défini dans les classes dérivées.
J'ai rendu les dimension "m" et "n" privées (ça m'a pris 1/2 journée). Elles sont maintenant accessibles (uniquement) via sizeM() et sizeN().
J'ai viré toutes les fonctions non utilisées sur lesquelles je suis tombé.
Actuellement toutes les opérations sont correctes (impossible de manipuler un stock si l'objet n'en possède pas).
J'ai commencé à renommer "a" en "rowP" (row pointer).
J'ai gardé un seul constructeur par objet - les opérateurs de conversion implicites ont été supprimés.
J'ai testé les memory leaks après mes modifs (sous purify avec cont2).
A moyen terme, il faudra supprimer le décalage de 1 des indices.