mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-15 10:08:34 +05:00
0020463: EDF 1099 SMESH: performance regression from V4 to V5
Remove memory leaks and optimize ParseParameters()
This commit is contained in:
parent
ed0a000310
commit
44f899d82d
@ -902,9 +902,9 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP
|
|||||||
SALOMEDS::SObject_var aSObj = ObjectToSObject(aStudy,theObject);
|
SALOMEDS::SObject_var aSObj = ObjectToSObject(aStudy,theObject);
|
||||||
if(aSObj->_is_nil())
|
if(aSObj->_is_nil())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
|
SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
|
||||||
|
|
||||||
SALOMEDS::GenericAttribute_var aFindAttr;
|
SALOMEDS::GenericAttribute_var aFindAttr;
|
||||||
bool hasAttr = aSObj->FindAttribute(aFindAttr, "AttributeString");
|
bool hasAttr = aSObj->FindAttribute(aFindAttr, "AttributeString");
|
||||||
if(VARIABLE_DEBUG)
|
if(VARIABLE_DEBUG)
|
||||||
@ -914,23 +914,23 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP
|
|||||||
anAttr = aStudyBuilder->FindOrCreateAttribute( aSObj, "AttributeString");
|
anAttr = aStudyBuilder->FindOrCreateAttribute( aSObj, "AttributeString");
|
||||||
SALOMEDS::AttributeString_var aStringAttr = SALOMEDS::AttributeString::_narrow(anAttr);
|
SALOMEDS::AttributeString_var aStringAttr = SALOMEDS::AttributeString::_narrow(anAttr);
|
||||||
|
|
||||||
|
CORBA::String_var oldparVar = aStringAttr->Value();
|
||||||
|
CORBA::String_var inpparVar = ParseParameters(theParameters);
|
||||||
TCollection_AsciiString aNewParams;
|
TCollection_AsciiString aNewParams;
|
||||||
TCollection_AsciiString aOldParameters(aStringAttr->Value());
|
TCollection_AsciiString aOldParameters(oldparVar.inout());
|
||||||
TCollection_AsciiString anInputParams(ParseParameters(theParameters));
|
TCollection_AsciiString anInputParams(inpparVar.inout());
|
||||||
|
|
||||||
if(!hasAttr)
|
if(!hasAttr)
|
||||||
aNewParams = anInputParams;
|
aNewParams = anInputParams;
|
||||||
else
|
else
|
||||||
aNewParams = aOldParameters+"|"+anInputParams;
|
aNewParams = aOldParameters+"|"+anInputParams;
|
||||||
|
|
||||||
if(VARIABLE_DEBUG)
|
if(VARIABLE_DEBUG)
|
||||||
{
|
{
|
||||||
cout<<"Input Parameters : "<<anInputParams<<endl;
|
cout<<"Input Parameters : "<<anInputParams<<endl;
|
||||||
cout<<"Old Parameters : "<<aOldParameters<<endl;
|
cout<<"Old Parameters : "<<aOldParameters<<endl;
|
||||||
cout<<"New Parameters : "<<aNewParams<<endl;
|
cout<<"New Parameters : "<<aNewParams<<endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
aStringAttr->SetValue( aNewParams.ToCString() );
|
aStringAttr->SetValue( aNewParams.ToCString() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -940,21 +940,45 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
char* SMESH_Gen_i::ParseParameters(const char* theParameters)
|
char* SMESH_Gen_i::ParseParameters(const char* theParameters)
|
||||||
{
|
{
|
||||||
const char* aParameters = CORBA::string_dup(theParameters);
|
//const char* aParameters = theParameters;
|
||||||
|
// const char* aParameters = CORBA::string_dup(theParameters);
|
||||||
TCollection_AsciiString anInputParams;
|
TCollection_AsciiString anInputParams;
|
||||||
SALOMEDS::Study_ptr aStudy = GetCurrentStudy();
|
SALOMEDS::Study_var aStudy = GetCurrentStudy();
|
||||||
if( !aStudy->_is_nil() ) {
|
if( !aStudy->_is_nil() ) {
|
||||||
SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(aParameters);
|
// SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(theParameters);
|
||||||
for(int j=0;j<aSections->length();j++) {
|
// for(int j=0;j<aSections->length();j++) {
|
||||||
SALOMEDS::ListOfStrings aVars= aSections[j];
|
// SALOMEDS::ListOfStrings aVars= aSections[j];
|
||||||
for(int i=0;i<aVars.length();i++ ) {
|
// for(int i=0;i<aVars.length();i++ ) {
|
||||||
anInputParams += aStudy->IsVariable(aVars[i].in()) ?
|
// anInputParams += aStudy->IsVariable(aVars[i].in()) ?
|
||||||
TCollection_AsciiString(aVars[i].in()) : TCollection_AsciiString("");
|
// TCollection_AsciiString(aVars[i].in()) : TCollection_AsciiString("");
|
||||||
if(i != aVars.length()-1)
|
// if(i != aVars.length()-1)
|
||||||
anInputParams+=":";
|
// anInputParams+=":";
|
||||||
|
// }
|
||||||
|
// if(j!=aSections->length()-1)
|
||||||
|
// anInputParams+="|";
|
||||||
|
// }
|
||||||
|
TCollection_AsciiString paramStr( theParameters );
|
||||||
|
static TCollection_AsciiString separators(":|");
|
||||||
|
int beg = 0, end;
|
||||||
|
char sep, *pParams = (char*)paramStr.ToCString();
|
||||||
|
while ( beg < paramStr.Length() )
|
||||||
|
{
|
||||||
|
end = beg-1;
|
||||||
|
while ( ++end < paramStr.Length() )
|
||||||
|
if ( pParams[end] == ':' || pParams[end] == '|')
|
||||||
|
break;
|
||||||
|
if ( end < paramStr.Length())
|
||||||
|
{
|
||||||
|
sep = pParams[end];
|
||||||
|
pParams[end] = '\0';
|
||||||
}
|
}
|
||||||
if(j!=aSections->length()-1)
|
if ( aStudy->IsVariable( pParams+beg ))
|
||||||
anInputParams+="|";
|
anInputParams += pParams+beg;
|
||||||
|
if ( end < paramStr.Length() )
|
||||||
|
anInputParams += sep;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
beg = end + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return CORBA::string_dup(anInputParams.ToCString());
|
return CORBA::string_dup(anInputParams.ToCString());
|
||||||
|
Loading…
Reference in New Issue
Block a user