Hi Bruno, we were just reading the ScGeom6D code and there a serious bug. Suppose a potential interaction of 2 spheres; Ig2_Sphere_Sphere_ScGeom6D::go calls Ig2_Sphere_Sphere_ScGeom::go, which, if it succeeds, creates a new ScGeom object and assigns it to I->geom. Then the execution goes back to Ig2_Sphere_Sphere_ScGeom6D::go, which will cast I->geom to ScGeom6D! This is not a valid operation and if you run in debug mode, the YADE_PTR_CAST will return NULL pointer. (
If you want to avoid code duplication, the common function must know what IGeom object to create, via a function argument; and since one cannot change the signature of ::go (otherwise the virtual call would call a different function), the common functionality must be in a separate function called from both ::go functors, but with different parameters. You can have a look at Ig2_Sphere_Sphere_L3Geom and Ig2_Sphere_Sphere_L6Geom for inspiration. Cheers, cv _______________________________________________ Mailing list: https://launchpad.net/~yade-dev Post to : yade-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-dev More help : https://help.launchpad.net/ListHelp