--- trunk/OOPSE/libmdtools/CallbackFunctor.cpp 2004/06/03 21:51:55 1232 +++ trunk/OOPSE/libmdtools/CallbackFunctor.cpp 2004/06/04 19:30:05 1248 @@ -3,10 +3,10 @@ #include "SimInfo.hpp" #include "ConstraintPair.hpp" -CallbackFunctor:: CallbackFunctor(SimInfo* rhs) : info(rhs){ - registerFunction(KeyType(typeid(ConstraintElement), typeid(ConstraintElement)), &CallbackFunctor::constrainAtomAtom); - registerFunction(KeyType(typeid(ConstraintElement), typeid(ConstraintRigidBody)), &CallbackFunctor::constrainAtomRigidBody); - registerFunction(KeyType(typeid(ConstraintRigidBody), typeid(ConstraintElement)), &CallbackFunctor::constrainRigidBodyAtom); +CallbackFunctor:: CallbackFunctor(SimInfo* rhs) : info(rhs), consTolerance(1.0e-6){ + registerFunction(KeyType(typeid(ConstraintAtom), typeid(ConstraintAtom)), &CallbackFunctor::constrainAtomAtom); + registerFunction(KeyType(typeid(ConstraintAtom), typeid(ConstraintRigidBody)), &CallbackFunctor::constrainAtomRigidBody); + registerFunction(KeyType(typeid(ConstraintRigidBody), typeid(ConstraintAtom)), &CallbackFunctor::constrainRigidBodyAtom); registerFunction(KeyType(typeid(ConstraintRigidBody), typeid(ConstraintRigidBody)), &CallbackFunctor::constrainRigidBodyRigidBody); } void CallbackFunctor::registerFunction(const KeyType& key, MappedType f){ @@ -17,7 +17,8 @@ int CallbackFunctor::operator()(ConstraintPair* consPa DoubleDispatchMap::iterator foundResult; curPair = consPair; - foundResult = ddMap.find(KeyType(typeid(consPair->firstElem), typeid(consPair->secondElem))); + //typeid must operate on reference, otherwise it return the type_info of base class + foundResult = ddMap.find(KeyType(typeid(*(consPair->firstElem)), typeid(*(consPair->secondElem)))); if(foundResult != ddMap.end()){ return (this->*(foundResult->second))(consPair->firstElem, consPair->secondElem);