Rien

Des modifs qui nous permettent de dériver les classes de base:
- DofSet: Possibilité de fonctionner sans LiaSet3
- PhySet/Domain: modification de données privées en protégées. Ajout du mot clef "virtual" pour does_exist() et add_properties()
- Correction d'un bug dans FastPhySet : get_properties(TX) n'est pas intercepté sion a fait fp_map_add(TX|TY|TZ)
Optimisation de la gestion mémoire de Metafor
Dans le but d'écrire les destructeurs des classes, j'essaye de définir les relations entre les objets (répondre à la question: quel objet est responsable de quel autre?). C'est la clef d'une bonne gestion mémoire. Voici mes constatations:
- la chaine de responsabilité programmée dans PhySet est mauvaise pour plusieurs raisons:
- elle est lente
- elle est trop générale (on peut stocker n'importe quoi dans n'importe quoi)
- elle oblige à faire des casts partout (cfr. (ElementSet*)get_properties(ELEMENTSET_PO) )
- elle est source de bugs vicieux. Par exemple la fonction membre PhySet::if_not_found se permet de créer automatiquement des objets sans que l'utilisateur sache qui est le responsable (et donc qui doit le détruire).
- elle n'est pas facilement parallélisable sans perdre l' "optimisation" de recherche.
- Nous l'utilisons pour:
- Accéder aux objets principaux (Domain, Metafor et Geometry)
- Accéder aux sets (MaterialSet, ElementSet, CurveSet, ...)
- Accéder aux Propelem à partir d'un élément fini (c'est là que le mécanisme est très original et utile).
- Accéder à la DB
- Les sets sont toujours situés dans les 3 objets principaux (inutile de chercher un objet dans un autre qui ne le contiendra jamais!).
Voici ce que je propose:
- La fonction PhySet::if_not_found() est désactivée partout (trop dangereux!) sauf pour les Steps.
- La fonction PhySet::add_properties() est désactivée partout sauf pour les objets partagés utilisés par l'ALE (pour l'instant, un Domain ALE partage l'analyse et le PositionSet avec le Domain principal).
- Les 3 objets principaux (Domain, Metafor et Geometry) n'utilisent plus la pile de properties mais des pointeurs typés. C'est eux seuls qui gèrent les sets. L'accès à ces sets se fait soit par le get_properties (optimisé par un swich) ou par des fonctions "get" classiques qui se chargent de créer l'objet s'il n'existe pas encore. On retourne des références.
- Les objets géométriques et les Interactions peuvent contenir un Propelem (et uniquement ça!). Ce pointeur sera typé également.
- La pile reste utilisée par les Steps (possibilité d'optimiser l'accès via une map ou une table de hashage).
- Il est impossible d'ajouter un objet non prévu à un autre!
- Tous les constructeurs sont ainsi faciles à écrire et le tout est parallélisable, rapide, clair et simple.
Mes modifs (jusqu'à présent)
- MetaDomain n'utilise plus sa pile de "properties". A la place, on utilise maintenant des pointeurs typés qui permettent:
- une plus grande rapidité (un switch au lieu d'une boucle sur une Stack).
- de supprimer les casts: "(ElementSet*)domain.get_properties(ELEMENTSET_PO)" peut s'écrire domain.getElementSet() et on obtient une référence (c'est donc aussi bcp plus sûr).
- une plus grande clarté au niveau de l'écriture et au niveau de la hiérarchie des objets. Par exemple, dans le cas du ElementSet, cette manière d'écrire implique que l'ElementSet appartient au Domain et c'est ce dernier qui en est responsable (création et destruction)
- d'écrire un destructeur.
- Modification identique de LocalGeometry.
- Suppression du MetaDomain::dom_add(prp) et MetaDomain::add_properties(prp) ! Modification de tous les cas-tests en conséquence.
- Création de macros NOPROP_PHYSET_H / NOPROP_PHYSET_CPP (fichiers MetaPhySet.*) pour optimiser le get_properties lorsque l'objet n'a jamais de propriétés lui-même. C'est le cas de l'élément (MetaElement), des matériaux (MetaMaterial/MaterialLaw), des Sets (PointSet, CurveSet, ...), des chargements (Loading et dérivés) des extracteurs (ValueExtractor et dérivés), etc
- Ajout d'une std::map pour stocker les Sets de DB dans la classe MetaStep (au lieu de la Stack d'OE).
- Suppression de IoStep au profit d'une double dérivation dans MetaStep.
Autres:
- Ajout d'un saveFac et bfac2tfac dans toolbox.utilities.py
- J'ai supprimé le lien TX|AB et POSITIONSET_PO par soucis de rapidité (dans metafor uniquement). Utilisez dorénavant toujours POSITIONSET_PO.
Nouveaux fichiers:
oo_meta/mtKernel/MetaPhySet.*