int SMDS_MeshIDFactory::GetFreeID()
{
- int newid;
- if (myPoolOfID.empty())
- {
- newid = ++myMaxID;
- //MESSAGE("GetFreeID new " << newid);
- }
- else
- {
- set<int>::iterator i = myPoolOfID.begin();
- newid = *i;//myPoolOfID.top();
- myPoolOfID.erase( i );//myPoolOfID.pop();
- //MESSAGE("GetFreeID pool " << newid);
- }
- return newid;
+ int newid;
+ if (myPoolOfID.empty())
+ {
+ newid = ++myMaxID;
+ }
+ else
+ {
+ set<int>::iterator i = myPoolOfID.begin();
+ newid = *i;
+ myPoolOfID.erase( i );
+ }
+ return newid;
}
//=======================================================================
//function : ReleaseID
-//purpose :
+//purpose :
//=======================================================================
void SMDS_MeshIDFactory::ReleaseID(int ID, int vtkId)
{
while ( i != myPoolOfID.begin() && myMaxID == *i ) {
--myMaxID; --i;
}
- if ( myMaxID == *i )
+ if ( myMaxID == *i ) {
--myMaxID; // begin of myPoolOfID reached
- else
- ++i;
- myPoolOfID.erase( i, myPoolOfID.end() );
+ myPoolOfID.clear();
+ }
+ else if ( myMaxID < ID-1 ) {
+ myPoolOfID.erase( ++i, myPoolOfID.end() );
+ }
}
}
}
void SMDS_MeshIDFactory::Clear()
{
- myMaxID = 0;
- myPoolOfID.clear();
+ myMaxID = 0;
+ myPoolOfID.clear();
}
void SMDS_MeshIDFactory::SetMesh(SMDS_Mesh *mesh)
{
- myMesh = mesh;
+ myMesh = mesh;
}
SMDS_Mesh* SMDS_MeshIDFactory::GetMesh()
{
- return myMesh;
+ return myMesh;
}
void SMDS_MeshIDFactory::emptyPool(int maxId)
{
- MESSAGE("SMDS_MeshIDFactory::emptyPool " << myMaxID << " --> " << maxId);
- myMaxID = maxId;
- myPoolOfID.clear();
+ myMaxID = maxId;
+ myPoolOfID.clear();
}