Răsfoiți Sursa

Josh's better version which handles multiple keys pointing to the same data.

Redmond Urbino 18 ani în urmă
părinte
comite
56724b87ff
1 a modificat fișierele cu 19 adăugiri și 9 ștergeri
  1. 19 9
      panda/src/ode/odeTriMeshData.cxx

+ 19 - 9
panda/src/ode/odeTriMeshData.cxx

@@ -57,20 +57,30 @@ print_data(const string &marker) {
 void OdeTriMeshData::
 remove_data(OdeTriMeshData *data) {
   odetrimeshdata_cat.debug() << get_class_type() << "::remove_data(" << data->get_id() << ")" << "\n";
-  TriMeshDataMap::iterator iter = _tri_mesh_data_map.begin();
-  int i = 0;
-  for (;iter != _tri_mesh_data_map.end(); ++iter) {
-    odetrimeshdata_cat.debug() << i<< " iter->first=" << iter->first << " iter->second=" << iter->second <<"\n";
+  TriMeshDataMap::iterator iter;
+  
+  for (iter = _tri_mesh_data_map.begin();
+       iter != _tri_mesh_data_map.end();
+       ++iter) {
     if ( iter->second == data ) {
-      odetrimeshdata_cat.debug() << "erasing iter->first=" << iter->first << " iter->second=" << iter->second <<"\n";
-      _tri_mesh_data_map.erase(iter);
-      return;
-      //iter = _tri_mesh_data_map.end();
+      break;
+    }
+  }
+  
+  while (iter != _tri_mesh_data_map.end()) {
+    _tri_mesh_data_map.erase(iter);
+    
+    for (iter = _tri_mesh_data_map.begin();
+         iter != _tri_mesh_data_map.end();
+         ++iter) {
+      if ( iter->second == data ) {
+        break;
+      }
     }
-    ++i;
   }
 }
 
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////