0022318: [CEA] Problems with study dump in SMESH

Memory needed for SMESH_2smeshpy::ConvertScript() reduced by 3 times
This commit is contained in:
eap 2013-09-12 11:11:52 +00:00
parent 1940817a98
commit ab30aac8c8
3 changed files with 36 additions and 36 deletions

View File

@ -455,14 +455,35 @@ namespace {
*/ */
//================================================================================ //================================================================================
TCollection_AsciiString void
SMESH_2smeshpy::ConvertScript(const TCollection_AsciiString& theScript, SMESH_2smeshpy::ConvertScript(TCollection_AsciiString& theScript,
Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod, Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod,
Resource_DataMapOfAsciiStringAsciiString& theObjectNames, Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
std::set< TCollection_AsciiString >& theRemovedObjIDs, std::set< TCollection_AsciiString >& theRemovedObjIDs,
SALOMEDS::Study_ptr& theStudy, SALOMEDS::Study_ptr& theStudy,
const bool theToKeepAllCommands) 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, theGen = new _pyGen( theEntry2AccessorMethod,
theObjectNames, theObjectNames,
theRemovedObjIDs, theRemovedObjIDs,
@ -470,33 +491,15 @@ SMESH_2smeshpy::ConvertScript(const TCollection_AsciiString& theScrip
theToKeepAllCommands ); theToKeepAllCommands );
// split theScript into separate commands // split theScript into separate commands
SMESH_NoteBook * aNoteBook = new SMESH_NoteBook();
int from = 1, end = theScript.Length(), to; int from = 1, end = theScript.Length(), to;
while ( from < end && ( to = theScript.Location( "\n", from, end ))) while ( from < end && ( to = theScript.Location( "\n", from, end )))
{ {
if ( to != from ) if ( to != from )
// cut out and store a command // cut out and store a command
aNoteBook->AddCommand( theScript.SubString( from, to - 1 )); theGen->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 ));
from = to + 1; from = to + 1;
} }
theScript.Clear();
// finish conversion // finish conversion
theGen->Flush(); theGen->Flush();
@ -518,7 +521,7 @@ SMESH_2smeshpy::ConvertScript(const TCollection_AsciiString& theScrip
} while ( orderChanges ); } while ( orderChanges );
// concat commands back into a script // concat commands back into a script
TCollection_AsciiString aScript, aPrevCmd; TCollection_AsciiString aPrevCmd;
set<_pyID> createdObjects; set<_pyID> createdObjects;
createdObjects.insert( "smeshBuilder" ); createdObjects.insert( "smeshBuilder" );
createdObjects.insert( "smesh" ); createdObjects.insert( "smesh" );
@ -532,17 +535,15 @@ SMESH_2smeshpy::ConvertScript(const TCollection_AsciiString& theScrip
CheckObjectPresence( *cmd, createdObjects ); CheckObjectPresence( *cmd, createdObjects );
if ( !(*cmd)->IsEmpty() ) { if ( !(*cmd)->IsEmpty() ) {
aPrevCmd = (*cmd)->GetString(); aPrevCmd = (*cmd)->GetString();
aScript += "\n"; theScript += "\n";
aScript += aPrevCmd; theScript += aPrevCmd;
} }
} }
} }
aScript += "\n"; theScript += "\n";
theGen->Free(); theGen->Free();
theGen.Nullify(); theGen.Nullify();
return aScript;
} }
//================================================================================ //================================================================================

View File

@ -984,7 +984,7 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
Resource_DataMapOfAsciiStringAsciiString anEntry2AccessorMethod; Resource_DataMapOfAsciiStringAsciiString anEntry2AccessorMethod;
std::set< TCollection_AsciiString > aRemovedObjIDs; std::set< TCollection_AsciiString > aRemovedObjIDs;
if ( !getenv("NO_2smeshpy_conversion")) if ( !getenv("NO_2smeshpy_conversion"))
aScript = SMESH_2smeshpy::ConvertScript( aScript, anEntry2AccessorMethod, SMESH_2smeshpy::ConvertScript( aScript, anEntry2AccessorMethod,
theObjectNames, aRemovedObjIDs, theObjectNames, aRemovedObjIDs,
theStudy, isHistoricalDump ); theStudy, isHistoricalDump );

View File

@ -46,12 +46,11 @@ class Resource_DataMapOfAsciiStringAsciiString;
*/ */
// =========================================================================================== // ===========================================================================================
class SMESH_2smeshpy namespace SMESH_2smeshpy
{ {
public:
/*! /*!
* \brief Convert a python script using commands of smeshBuilder.py * \brief Convert a python script using commands of smeshBuilder.py
* \param theScript - Input script * \param theScript - the Input script to convert
* \param theEntry2AccessorMethod - returns method names to access to * \param theEntry2AccessorMethod - returns method names to access to
* objects wrapped with python class * objects wrapped with python class
* \param theObjectNames - names of objects * \param theObjectNames - names of objects
@ -60,8 +59,8 @@ public:
* to exclude commands relating to objects removed from study * to exclude commands relating to objects removed from study
* \retval TCollection_AsciiString - Convertion result * \retval TCollection_AsciiString - Convertion result
*/ */
static TCollection_AsciiString void
ConvertScript(const TCollection_AsciiString& theScript, ConvertScript(TCollection_AsciiString& theScript,
Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod, Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod,
Resource_DataMapOfAsciiStringAsciiString& theObjectNames, Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
std::set< TCollection_AsciiString >& theRemovedObjIDs, std::set< TCollection_AsciiString >& theRemovedObjIDs,