X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH%2FSMESH_Mesh.cxx;h=9ed363a17251602bd888c851959075cb107425bb;hb=7d57cfe3069f0be65c6773ff704c2642129b2bb8;hp=7201c528048d72564ee623658c256ffa14ca062b;hpb=90538c51905cda57f579f1c2a04ca715bf6ab905;p=modules%2Fsmesh.git diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index 7201c5280..9ed363a17 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -176,10 +176,18 @@ SMESH_Mesh::~SMESH_Mesh() { if(MYDEBUG) MESSAGE("SMESH_Mesh::~SMESH_Mesh"); - // avoid usual removal of elements while processing RemoveHypothesis( algo ) event - SMESHDS_SubMeshIteratorPtr smIt = _myMeshDS->SubMeshes(); - while ( smIt->more() ) - const_cast( smIt->next() )->Clear(); + if ( _myDocument ) // avoid destructing _myMeshDS from ~SMESH_Gen() + _myDocument->RemoveMesh( _id ); + _myDocument = 0; + + // remove self from studyContext + if ( _gen ) + { + StudyContextStruct * studyContext = _gen->GetStudyContext(); + studyContext->mapMesh.erase( _id ); + } + + _myMeshDS->ClearMesh(); // issue 0020340: EDF 1022 SMESH : Crash with FindNodeClosestTo in a second new study // Notify event listeners at least that something happens @@ -200,16 +208,6 @@ SMESH_Mesh::~SMESH_Mesh() if ( _callUp) delete _callUp; _callUp = 0; - // remove self from studyContext - if ( _gen ) - { - StudyContextStruct * studyContext = _gen->GetStudyContext(); - studyContext->mapMesh.erase( _id ); - } - if ( _myDocument ) - _myDocument->RemoveMesh( _id ); - _myDocument = 0; - if ( _myMeshDS ) { // delete _myMeshDS, in a thread in order not to block closing a study with large meshes #ifndef WIN32 @@ -620,7 +618,7 @@ SMESH_ComputeErrorPtr SMESH_Mesh::GMFToMesh(const char* theFileName, SMESH_Hypothesis::Hypothesis_Status SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape, int anHypId, - std::string* anError ) throw(SALOME_Exception) + std::string* anError ) { Unexpect aCatch(SalomeException); if(MYDEBUG) MESSAGE("SMESH_Mesh::AddHypothesis"); @@ -715,7 +713,7 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape, SMESH_Hypothesis::Hypothesis_Status SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape, - int anHypId) throw( SALOME_Exception ) + int anHypId) { Unexpect aCatch(SalomeException); if(MYDEBUG) MESSAGE("SMESH_Mesh::RemoveHypothesis"); @@ -786,7 +784,6 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape, const std::list& SMESH_Mesh::GetHypothesisList(const TopoDS_Shape & aSubShape) const - throw(SALOME_Exception) { return _myMeshDS->GetHypothesis(aSubShape); } @@ -995,7 +992,7 @@ SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const int anHypId) const */ //============================================================================= -const std::list & SMESH_Mesh::GetLog() throw(SALOME_Exception) +const std::list & SMESH_Mesh::GetLog() { Unexpect aCatch(SalomeException); return _myMeshDS->GetScript()->GetCommands(); @@ -1006,7 +1003,7 @@ const std::list & SMESH_Mesh::GetLog() throw(SALOME_Exception) * */ //============================================================================= -void SMESH_Mesh::ClearLog() throw(SALOME_Exception) +void SMESH_Mesh::ClearLog() { Unexpect aCatch(SalomeException); _myMeshDS->GetScript()->Clear(); @@ -1019,7 +1016,6 @@ void SMESH_Mesh::ClearLog() throw(SALOME_Exception) //============================================================================= SMESH_subMesh * SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape) - throw(SALOME_Exception) { int index = _myMeshDS->ShapeToIndex(aSubShape); if ( !index && aSubShape.IsNull() ) @@ -1072,7 +1068,6 @@ SMESH_subMesh * SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape) //============================================================================= SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) const - throw(SALOME_Exception) { int index = _myMeshDS->ShapeToIndex(aSubShape); return GetSubMeshContaining( index ); @@ -1086,10 +1081,8 @@ SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) //============================================================================= SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const int aShapeID) const -throw(SALOME_Exception) { SMESH_subMesh *aSubMesh = _subMeshHolder->Get( aShapeID ); - return aSubMesh; } @@ -1101,7 +1094,6 @@ throw(SALOME_Exception) std::list SMESH_Mesh::GetGroupSubMeshesContaining(const TopoDS_Shape & aSubShape) const - throw(SALOME_Exception) { std::list found; @@ -1167,7 +1159,7 @@ bool SMESH_Mesh::IsUsedHypothesis(SMESHDS_Hypothesis * anHyp, // algorithm parameter if (algo) { - // look trough hypotheses used by algo + // look through hypotheses used by algo const SMESH_HypoFilter* hypoKind; if (( hypoKind = algo->GetCompatibleHypoFilter( !hyp->IsAuxiliary() ))) { std::list usedHyps; @@ -1191,11 +1183,11 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* h if ( !GetMeshDS()->IsUsedHypothesis( hyp )) return; - bool toCallBack = true; - if ( _callUp && hyp && NbNodes() == 0 ) // for not loaded mesh (#16648) + int nbEntities = ( _myMeshDS->NbNodes() + _myMeshDS->NbElements() ); + if ( hyp && _callUp && !_callUp->IsLoaded() ) // for not loaded mesh (#16648) { - _callUp->HypothesisModified( hyp->GetID() ); - toCallBack = ( NbNodes() > 0 ); + _callUp->HypothesisModified( hyp->GetID(), /*updateIcons=*/true ); + nbEntities = ( _myMeshDS->NbNodes() + _myMeshDS->NbElements() ); // after loading mesh } SMESH_Algo *algo; @@ -1265,8 +1257,9 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* h HasModificationsToDiscard(); // to reset _isModified flag if mesh becomes empty GetMeshDS()->Modified(); - if ( _callUp && hyp && toCallBack ) - _callUp->HypothesisModified( hyp->GetID() ); + int newNbEntities = ( _myMeshDS->NbNodes() + _myMeshDS->NbElements() ); + if ( hyp && _callUp ) + _callUp->HypothesisModified( hyp->GetID(), newNbEntities != nbEntities ); } //============================================================================= @@ -1274,13 +1267,13 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* h * Auto color functionality */ //============================================================================= -void SMESH_Mesh::SetAutoColor(bool theAutoColor) throw(SALOME_Exception) +void SMESH_Mesh::SetAutoColor(bool theAutoColor) { Unexpect aCatch(SalomeException); _isAutoColor = theAutoColor; } -bool SMESH_Mesh::GetAutoColor() throw(SALOME_Exception) +bool SMESH_Mesh::GetAutoColor() { Unexpect aCatch(SalomeException); return _isAutoColor; @@ -1407,10 +1400,8 @@ bool SMESH_Mesh::HasDuplicatedGroupNamesMED() * \param [in] theAutoGroups - boolean parameter for creating/not creating * the groups Group_On_All_Nodes, Group_On_All_Faces, ... ; * the typical use is auto_groups=false. - * \param [in] theMinor - define the minor version (y, where version is x.y.z) of MED file format. - * The theMinor must be between 0 and the current minor version of MED file library. - * If theMinor is equal to -1, the minor version is not changed (default). - * The major version (x, where version is x.y.z) cannot be changed. + * \param [in] theVersion - define the minor (xy, where version is x.y.z) of MED file format. + * If theVersion is equal to -1, the minor version is not changed (default). * \param [in] meshPart - mesh data to export * \param [in] theAutoDimension - if \c true, a space dimension of a MED mesh can be either * - 1D if all mesh nodes lie on OX coordinate axis, or @@ -1435,7 +1426,6 @@ void SMESH_Mesh::ExportMED(const char * file, bool theAddODOnVertices, double theZTolerance, bool theAllElemsToGroup) -throw(SALOME_Exception) { MESSAGE("MED_VERSION:"<< theVersion); SMESH_TRY; @@ -1506,7 +1496,6 @@ throw(SALOME_Exception) void SMESH_Mesh::ExportSAUV(const char *file, const char* theMeshName, bool theAutoGroups) - throw(SALOME_Exception) { std::string medfilename(file); medfilename += ".med"; @@ -1550,7 +1539,7 @@ void SMESH_Mesh::ExportSAUV(const char *file, //================================================================================ void SMESH_Mesh::ExportDAT(const char * file, - const SMESHDS_Mesh* meshPart) throw(SALOME_Exception) + const SMESHDS_Mesh* meshPart) { Unexpect aCatch(SalomeException); DriverDAT_W_SMDS_Mesh myWriter; @@ -1567,7 +1556,7 @@ void SMESH_Mesh::ExportDAT(const char * file, //================================================================================ void SMESH_Mesh::ExportUNV(const char * file, - const SMESHDS_Mesh* meshPart) throw(SALOME_Exception) + const SMESHDS_Mesh* meshPart) { Unexpect aCatch(SalomeException); DriverUNV_W_SMDS_Mesh myWriter; @@ -1602,7 +1591,7 @@ void SMESH_Mesh::ExportUNV(const char * file, void SMESH_Mesh::ExportSTL(const char * file, const bool isascii, const char * name, - const SMESHDS_Mesh* meshPart) throw(SALOME_Exception) + const SMESHDS_Mesh* meshPart) { Unexpect aCatch(SalomeException); DriverSTL_W_SMDS_Mesh myWriter; @@ -1757,7 +1746,7 @@ double SMESH_Mesh::GetComputeProgress() const */ //================================================================================ -int SMESH_Mesh::NbNodes() const throw(SALOME_Exception) +int SMESH_Mesh::NbNodes() const { Unexpect aCatch(SalomeException); return _myMeshDS->NbNodes(); @@ -1769,7 +1758,7 @@ int SMESH_Mesh::NbNodes() const throw(SALOME_Exception) */ //================================================================================ -int SMESH_Mesh::Nb0DElements() const throw(SALOME_Exception) +int SMESH_Mesh::Nb0DElements() const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().Nb0DElements(); @@ -1781,7 +1770,7 @@ int SMESH_Mesh::Nb0DElements() const throw(SALOME_Exception) */ //================================================================================ -int SMESH_Mesh::NbEdges(SMDSAbs_ElementOrder order) const throw(SALOME_Exception) +int SMESH_Mesh::NbEdges(SMDSAbs_ElementOrder order) const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbEdges(order); @@ -1793,7 +1782,7 @@ int SMESH_Mesh::NbEdges(SMDSAbs_ElementOrder order) const throw(SALOME_Exception */ //================================================================================ -int SMESH_Mesh::NbFaces(SMDSAbs_ElementOrder order) const throw(SALOME_Exception) +int SMESH_Mesh::NbFaces(SMDSAbs_ElementOrder order) const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbFaces(order); @@ -1805,7 +1794,7 @@ int SMESH_Mesh::NbFaces(SMDSAbs_ElementOrder order) const throw(SALOME_Exception */ //================================================================================ -int SMESH_Mesh::NbTriangles(SMDSAbs_ElementOrder order) const throw(SALOME_Exception) +int SMESH_Mesh::NbTriangles(SMDSAbs_ElementOrder order) const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbTriangles(order); @@ -1817,7 +1806,7 @@ int SMESH_Mesh::NbTriangles(SMDSAbs_ElementOrder order) const throw(SALOME_Excep */ //================================================================================ -int SMESH_Mesh::NbBiQuadTriangles() const throw(SALOME_Exception) +int SMESH_Mesh::NbBiQuadTriangles() const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbBiQuadTriangles(); @@ -1829,7 +1818,7 @@ int SMESH_Mesh::NbBiQuadTriangles() const throw(SALOME_Exception) */ //================================================================================ -int SMESH_Mesh::NbQuadrangles(SMDSAbs_ElementOrder order) const throw(SALOME_Exception) +int SMESH_Mesh::NbQuadrangles(SMDSAbs_ElementOrder order) const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbQuadrangles(order); @@ -1841,7 +1830,7 @@ int SMESH_Mesh::NbQuadrangles(SMDSAbs_ElementOrder order) const throw(SALOME_Exc */ //================================================================================ -int SMESH_Mesh::NbBiQuadQuadrangles() const throw(SALOME_Exception) +int SMESH_Mesh::NbBiQuadQuadrangles() const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbBiQuadQuadrangles(); @@ -1853,7 +1842,7 @@ int SMESH_Mesh::NbBiQuadQuadrangles() const throw(SALOME_Exception) */ //================================================================================ -int SMESH_Mesh::NbPolygons(SMDSAbs_ElementOrder order) const throw(SALOME_Exception) +int SMESH_Mesh::NbPolygons(SMDSAbs_ElementOrder order) const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbPolygons(order); @@ -1865,7 +1854,7 @@ int SMESH_Mesh::NbPolygons(SMDSAbs_ElementOrder order) const throw(SALOME_Except */ //================================================================================ -int SMESH_Mesh::NbVolumes(SMDSAbs_ElementOrder order) const throw(SALOME_Exception) +int SMESH_Mesh::NbVolumes(SMDSAbs_ElementOrder order) const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbVolumes(order); @@ -1877,7 +1866,7 @@ int SMESH_Mesh::NbVolumes(SMDSAbs_ElementOrder order) const throw(SALOME_Excepti */ //================================================================================ -int SMESH_Mesh::NbTetras(SMDSAbs_ElementOrder order) const throw(SALOME_Exception) +int SMESH_Mesh::NbTetras(SMDSAbs_ElementOrder order) const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbTetras(order); @@ -1889,7 +1878,7 @@ int SMESH_Mesh::NbTetras(SMDSAbs_ElementOrder order) const throw(SALOME_Exceptio */ //================================================================================ -int SMESH_Mesh::NbHexas(SMDSAbs_ElementOrder order) const throw(SALOME_Exception) +int SMESH_Mesh::NbHexas(SMDSAbs_ElementOrder order) const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbHexas(order); @@ -1901,7 +1890,7 @@ int SMESH_Mesh::NbHexas(SMDSAbs_ElementOrder order) const throw(SALOME_Exception */ //================================================================================ -int SMESH_Mesh::NbTriQuadraticHexas() const throw(SALOME_Exception) +int SMESH_Mesh::NbTriQuadraticHexas() const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbTriQuadHexas(); @@ -1913,7 +1902,7 @@ int SMESH_Mesh::NbTriQuadraticHexas() const throw(SALOME_Exception) */ //================================================================================ -int SMESH_Mesh::NbPyramids(SMDSAbs_ElementOrder order) const throw(SALOME_Exception) +int SMESH_Mesh::NbPyramids(SMDSAbs_ElementOrder order) const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbPyramids(order); @@ -1925,19 +1914,19 @@ int SMESH_Mesh::NbPyramids(SMDSAbs_ElementOrder order) const throw(SALOME_Except */ //================================================================================ -int SMESH_Mesh::NbPrisms(SMDSAbs_ElementOrder order) const throw(SALOME_Exception) +int SMESH_Mesh::NbPrisms(SMDSAbs_ElementOrder order) const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbPrisms(order); } -int SMESH_Mesh::NbQuadPrisms() const throw (SALOME_Exception) +int SMESH_Mesh::NbQuadPrisms() const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbQuadPrisms(); } -int SMESH_Mesh::NbBiQuadPrisms() const throw (SALOME_Exception) +int SMESH_Mesh::NbBiQuadPrisms() const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbBiQuadPrisms(); @@ -1950,7 +1939,7 @@ int SMESH_Mesh::NbBiQuadPrisms() const throw (SALOME_Exception) */ //================================================================================ -int SMESH_Mesh::NbHexagonalPrisms() const throw(SALOME_Exception) +int SMESH_Mesh::NbHexagonalPrisms() const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbHexPrisms(); @@ -1962,7 +1951,7 @@ int SMESH_Mesh::NbHexagonalPrisms() const throw(SALOME_Exception) */ //================================================================================ -int SMESH_Mesh::NbPolyhedrons() const throw(SALOME_Exception) +int SMESH_Mesh::NbPolyhedrons() const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbPolyhedrons(); @@ -1974,7 +1963,7 @@ int SMESH_Mesh::NbPolyhedrons() const throw(SALOME_Exception) */ //================================================================================ -int SMESH_Mesh::NbBalls() const throw(SALOME_Exception) +int SMESH_Mesh::NbBalls() const { Unexpect aCatch(SalomeException); return _myMeshDS->GetMeshInfo().NbBalls(); @@ -1986,7 +1975,7 @@ int SMESH_Mesh::NbBalls() const throw(SALOME_Exception) */ //================================================================================ -int SMESH_Mesh::NbSubMesh() const throw(SALOME_Exception) +int SMESH_Mesh::NbSubMesh() const { Unexpect aCatch(SalomeException); return _myMeshDS->NbSubMesh(); @@ -2027,6 +2016,16 @@ bool SMESH_Mesh::IsMainShape(const TopoDS_Shape& theShape) const return theShape.IsSame(_myMeshDS->ShapeToMesh() ); } +//======================================================================= +//function : GetShapeByEntry +//purpose : return TopoDS_Shape by its study entry +//======================================================================= + +TopoDS_Shape SMESH_Mesh::GetShapeByEntry(const std::string& entry) const +{ + return _callUp ? _callUp->GetShapeByEntry( entry ) : TopoDS_Shape(); +} + //============================================================================= /*! * @@ -2055,7 +2054,7 @@ SMESH_Group* SMESH_Mesh::AddGroup (const SMDSAbs_ElementType theType, */ //================================================================================ -SMESH_Group* SMESH_Mesh::AddGroup (SMESHDS_GroupBase* groupDS) throw(SALOME_Exception) +SMESH_Group* SMESH_Mesh::AddGroup (SMESHDS_GroupBase* groupDS) { if ( !groupDS ) throw SALOME_Exception(LOCALIZED ("SMESH_Mesh::AddGroup(): NULL SMESHDS_GroupBase")); @@ -2407,18 +2406,19 @@ void SMESH_Mesh::fillAncestorsMap(const TopoDS_Shape& theShape) bool SMESH_Mesh::SortByMeshOrder(std::vector& theListToSort) const { - if ( !_mySubMeshOrder.size() || theListToSort.size() < 2) + if ( _mySubMeshOrder.empty() || theListToSort.size() < 2 ) return true; - - bool res = false; - std::vector onlyOrderedList, smVec; - // collect all ordered submeshes in one list as pointers + + // collect all ordered sub-meshes in smVec as pointers // and get their positions within theListToSort + + std::vector smVec; typedef std::vector::iterator TPosInList; - std::map< int, TPosInList > sortedPos; + std::map< size_t, size_t > sortedPos; // index in theListToSort to order TPosInList smBeg = theListToSort.begin(), smEnd = theListToSort.end(); TListOfListOfInt::const_iterator listIdsIt = _mySubMeshOrder.begin(); + bool needSort = false; for( ; listIdsIt != _mySubMeshOrder.end(); listIdsIt++) { const TListOfInt& listOfId = *listIdsIt; @@ -2432,6 +2432,7 @@ bool SMESH_Mesh::SortByMeshOrder(std::vector& theListToSort) con smVec.push_back( sm ); if ( sm->GetSubMeshDS() && sm->GetSubMeshDS()->IsComplexSubmesh() ) { + smVec.reserve( smVec.size() + sm->GetSubMeshDS()->NbSubMeshes() ); SMESHDS_SubMeshIteratorPtr smdsIt = sm->GetSubMeshDS()->GetSubMeshIterator(); while ( smdsIt->more() ) { @@ -2445,27 +2446,46 @@ bool SMESH_Mesh::SortByMeshOrder(std::vector& theListToSort) con // find smVec items in theListToSort for ( size_t i = 0; i < smVec.size(); ++i ) { - TPosInList smPos = find( smBeg, smEnd, smVec[i] ); - if ( smPos != smEnd ) { - sortedPos[ std::distance( smBeg, smPos )] = smPos; - if ( sortedPos.size() > onlyOrderedList.size() ) - onlyOrderedList.push_back( smVec[i] ); + TPosInList smPos = find( smBeg, smEnd, smVec[i] ); // position in theListToSort + if ( smPos != smEnd ) + { + size_t posInList = std::distance( smBeg, smPos ); + size_t order = sortedPos.size(); + sortedPos.insert( std::make_pair( posInList, order )); + if ( posInList != order ) + needSort = true; } } } - if (onlyOrderedList.size() < 2) - return res; - res = true; + if ( ! needSort ) + return false; - std::vector::iterator onlyBIt = onlyOrderedList.begin(); - std::vector::iterator onlyEIt = onlyOrderedList.end(); + // set sm of sortedPos from theListToSort to front of orderedSM + // and the rest of theListToSort to orderedSM end - // iterate on ordered sub-meshes and insert them in detected positions - std::map< int, TPosInList >::iterator i_pos = sortedPos.begin(); - for ( ; onlyBIt != onlyEIt; ++onlyBIt, ++i_pos ) - *(i_pos->second) = *onlyBIt; + std::vector orderedSM; + orderedSM.reserve( theListToSort.size() ); + orderedSM.resize( sortedPos.size() ); - return res; + size_t iPrev = 0; + sortedPos.insert( std::make_pair( theListToSort.size(), sortedPos.size() )); + for ( const auto & pos_order : sortedPos ) + { + const size_t& posInList = pos_order.first; + const size_t& order = pos_order.second; + if ( order < sortedPos.size() - 1 ) + orderedSM[ order ] = theListToSort[ posInList ]; + + if ( iPrev < posInList ) + orderedSM.insert( orderedSM.end(), + theListToSort.begin() + iPrev, + theListToSort.begin() + posInList ); + iPrev = posInList + 1; + } + + theListToSort.swap( orderedSM ); + + return true; } //================================================================================