From 0e341dabe0b027a16cddb831bf06e8a26ea48733 Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 12 Sep 2013 11:11:30 +0000 Subject: [PATCH] 0022318: [CEA] Problems with study dump in SMESH Memory needed for SMESH_2smeshpy::ConvertScript() reduced by 3 times --- src/SMESH_I/SMESH_2smeshpy.cxx | 57 ++++++++++++++++---------------- src/SMESH_I/SMESH_DumpPython.cxx | 32 +++++++++--------- src/SMESH_I/SMESH_PythonDump.hxx | 23 ++++++------- 3 files changed, 56 insertions(+), 56 deletions(-) diff --git a/src/SMESH_I/SMESH_2smeshpy.cxx b/src/SMESH_I/SMESH_2smeshpy.cxx index de6a57be9..b4315cf23 100644 --- a/src/SMESH_I/SMESH_2smeshpy.cxx +++ b/src/SMESH_I/SMESH_2smeshpy.cxx @@ -447,14 +447,35 @@ namespace { */ //================================================================================ -TCollection_AsciiString -SMESH_2smeshpy::ConvertScript(const TCollection_AsciiString& theScript, +void +SMESH_2smeshpy::ConvertScript(TCollection_AsciiString& theScript, Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod, Resource_DataMapOfAsciiStringAsciiString& theObjectNames, std::set< TCollection_AsciiString >& theRemovedObjIDs, SALOMEDS::Study_ptr& theStudy, const bool theToKeepAllCommands) { + // process notebook variables + { + SMESH_NoteBook aNoteBook; + + int from = 1, end = theScript.Length(), to; + while ( from < end && ( to = theScript.Location( "\n", from, end ))) + { + if ( to != from ) + // cut out and store a command + aNoteBook.AddCommand( theScript.SubString( from, to - 1 )); + from = to + 1; + } + theScript.Clear(); + + aNoteBook.ReplaceVariables(); + + theScript = aNoteBook.GetResultScript(); + } + + // convert to smeshBuilder.py API + theGen = new _pyGen( theEntry2AccessorMethod, theObjectNames, theRemovedObjIDs, @@ -462,33 +483,15 @@ SMESH_2smeshpy::ConvertScript(const TCollection_AsciiString& theScrip theToKeepAllCommands ); // split theScript into separate commands - - SMESH_NoteBook * aNoteBook = new SMESH_NoteBook(); - int from = 1, end = theScript.Length(), to; while ( from < end && ( to = theScript.Location( "\n", from, end ))) { if ( to != from ) // cut out and store a command - aNoteBook->AddCommand( theScript.SubString( from, to - 1 )); - from = to + 1; - } - - aNoteBook->ReplaceVariables(); - - TCollection_AsciiString aNoteScript = aNoteBook->GetResultScript(); - delete aNoteBook; - aNoteBook = 0; - - // split theScript into separate commands - from = 1, end = aNoteScript.Length(); - while ( from < end && ( to = aNoteScript.Location( "\n", from, end ))) - { - if ( to != from ) - // cut out and store a command - theGen->AddCommand( aNoteScript.SubString( from, to - 1 )); + theGen->AddCommand( theScript.SubString( from, to - 1 )); from = to + 1; } + theScript.Clear(); // finish conversion theGen->Flush(); @@ -510,7 +513,7 @@ SMESH_2smeshpy::ConvertScript(const TCollection_AsciiString& theScrip } while ( orderChanges ); // concat commands back into a script - TCollection_AsciiString aScript, aPrevCmd; + TCollection_AsciiString aPrevCmd; set<_pyID> createdObjects; createdObjects.insert( "smeshBuilder" ); createdObjects.insert( "smesh" ); @@ -524,17 +527,15 @@ SMESH_2smeshpy::ConvertScript(const TCollection_AsciiString& theScrip CheckObjectPresence( *cmd, createdObjects ); if ( !(*cmd)->IsEmpty() ) { aPrevCmd = (*cmd)->GetString(); - aScript += "\n"; - aScript += aPrevCmd; + theScript += "\n"; + theScript += aPrevCmd; } } } - aScript += "\n"; + theScript += "\n"; theGen->Free(); theGen.Nullify(); - - return aScript; } //================================================================================ diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx index b409ca968..7d26ddd73 100644 --- a/src/SMESH_I/SMESH_DumpPython.cxx +++ b/src/SMESH_I/SMESH_DumpPython.cxx @@ -234,12 +234,12 @@ namespace SMESH TPythonDump:: operator<<(SALOMEDS::SObject_ptr aSObject) { - if ( !aSObject->_is_nil() ) { - CORBA::String_var entry = aSObject->GetID(); - myStream << entry.in(); - } - else { - myStream << theNotPublishedObjectName; + if ( !aSObject->_is_nil() ) { + CORBA::String_var entry = aSObject->GetID(); + myStream << entry.in(); + } + else { + myStream << theNotPublishedObjectName; } return *this; } @@ -461,9 +461,9 @@ namespace SMESH DumpArray( theList, *this ); return *this; } - const char* TPythonDump::NotPublishedObjectName() - { - return theNotPublishedObjectName; + const char* TPythonDump::NotPublishedObjectName() + { + return theNotPublishedObjectName; } TCollection_AsciiString myLongStringStart( "TPythonDump::LongStringStart" ); @@ -870,9 +870,9 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl Resource_DataMapOfAsciiStringAsciiString anEntry2AccessorMethod; std::set< TCollection_AsciiString > aRemovedObjIDs; if ( !getenv("NO_2smeshpy_conversion")) - aScript = SMESH_2smeshpy::ConvertScript( aScript, anEntry2AccessorMethod, - theObjectNames, aRemovedObjIDs, - theStudy, isHistoricalDump ); + SMESH_2smeshpy::ConvertScript( aScript, anEntry2AccessorMethod, + theObjectNames, aRemovedObjIDs, + theStudy, isHistoricalDump ); // Replace characters used instead of quote marks to quote notebook variables { @@ -1005,10 +1005,10 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl aSetNameScriptPart += helper + ", '" + aGUIName + "')"; } } - if ( !aSetNameScriptPart.IsEmpty() ) - { - anUpdatedScript += "\n\t## set object names"; - anUpdatedScript += aSetNameScriptPart; + if ( !aSetNameScriptPart.IsEmpty() ) + { + anUpdatedScript += "\n\t## set object names"; + anUpdatedScript += aSetNameScriptPart; } // ----------------------------------------------------------------- diff --git a/src/SMESH_I/SMESH_PythonDump.hxx b/src/SMESH_I/SMESH_PythonDump.hxx index ac92008df..b04479071 100644 --- a/src/SMESH_I/SMESH_PythonDump.hxx +++ b/src/SMESH_I/SMESH_PythonDump.hxx @@ -46,22 +46,21 @@ class Resource_DataMapOfAsciiStringAsciiString; */ // =========================================================================================== -class SMESH_2smeshpy +namespace SMESH_2smeshpy { -public: /*! - * \brief Convert a python script using commands of smesh.py - * \param theScript - Input script - * \param theEntry2AccessorMethod - returns method names to access to - * objects wrapped with python class - * \param theObjectNames - names of objects - * \param theRemovedObjIDs - entries of objects whose created commands were removed - * \param theHistoricalDump - true means to keep all commands, false means - * to exclude commands relating to objects removed from study + * \brief Convert a python script using commands of smeshBuilder.py + * \param theScript - the Input script to convert + * \param theEntry2AccessorMethod - returns method names to access to + * objects wrapped with python class + * \param theObjectNames - names of objects + * \param theRemovedObjIDs - entries of objects whose created commands were removed + * \param theHistoricalDump - true means to keep all commands, false means + * to exclude commands relating to objects removed from study * \retval TCollection_AsciiString - Convertion result */ - static TCollection_AsciiString - ConvertScript(const TCollection_AsciiString& theScript, + void + ConvertScript(TCollection_AsciiString& theScript, Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod, Resource_DataMapOfAsciiStringAsciiString& theObjectNames, std::set< TCollection_AsciiString >& theRemovedObjIDs, -- 2.30.2