From: vro Date: Thu, 16 May 2013 07:07:43 +0000 (+0400) Subject: 0023912: TDataStd_ExtStringArray::Value() returns a copy of TCollection_ExtendedStrin... X-Git-Tag: V6_7_0_beta~282 X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commitdiff_plain;h=bbd048069dd74f558620485bb7e232a7b767b864 0023912: TDataStd_ExtStringArray::Value() returns a copy of TCollection_ExtendedString, but it might return a reference. Since now TDataStd_ExtStringArray::Value() returns a constant reference to the string value. Also, a draw-command GetExtStringArray is modified to manipulate with the string by a constant reference. Added test case bugs/caf/bug23912 --- diff --git a/src/DDataStd/DDataStd_BasicCommands.cxx b/src/DDataStd/DDataStd_BasicCommands.cxx index 8174246525..2be18b8c30 100755 --- a/src/DDataStd/DDataStd_BasicCommands.cxx +++ b/src/DDataStd/DDataStd_BasicCommands.cxx @@ -952,12 +952,9 @@ static Standard_Integer DDataStd_GetExtStringArray (Draw_Interpretor& di, return 1; } - TCollection_ExtendedString anExtendedString; - TCollection_AsciiString anAsciiString; for(Standard_Integer i = A->Lower(); i<=A->Upper(); i++){ - anExtendedString = A->Value(i); - anAsciiString = TCollection_AsciiString (A->Value(i),'?'); - //cout << anAsciiString.ToCString() << endl; + const TCollection_ExtendedString& anExtendedString = A->Value(i); + TCollection_AsciiString anAsciiString(A->Value(i),'?'); di << anAsciiString.ToCString(); if(iUpper()) di<<" "; diff --git a/src/TDataStd/TDataStd_ExtStringArray.cdl b/src/TDataStd/TDataStd_ExtStringArray.cdl index 5809189ffa..693e4bb54c 100755 --- a/src/TDataStd/TDataStd_ExtStringArray.cdl +++ b/src/TDataStd/TDataStd_ExtStringArray.cdl @@ -64,6 +64,7 @@ is Value (me; Index : Integer from Standard) ---Purpose: Returns the value of the th element of the array -- + ---C++: return const & ---C++: alias operator () returns ExtendedString from TCollection; diff --git a/src/TDataStd/TDataStd_ExtStringArray.cxx b/src/TDataStd/TDataStd_ExtStringArray.cxx index fdc7b0211e..f7478da557 100755 --- a/src/TDataStd/TDataStd_ExtStringArray.cxx +++ b/src/TDataStd/TDataStd_ExtStringArray.cxx @@ -99,18 +99,20 @@ void TDataStd_ExtStringArray::SetValue(const Standard_Integer index, const TColl //======================================================================= -//function : GetValue +//function : Value //purpose : //======================================================================= -TCollection_ExtendedString TDataStd_ExtStringArray::Value (const Standard_Integer index) const +const TCollection_ExtendedString& TDataStd_ExtStringArray::Value (const Standard_Integer index) const { - if(myValue.IsNull()) return TCollection_ExtendedString(); - return myValue->Value(index); + if (myValue.IsNull()) + { + static TCollection_ExtendedString staticEmptyValue; + return staticEmptyValue; + } + return myValue->Value(index); } - - //======================================================================= //function : Lower //purpose : diff --git a/tests/bugs/caf/bug23912 b/tests/bugs/caf/bug23912 new file mode 100644 index 0000000000..6509a8230c --- /dev/null +++ b/tests/bugs/caf/bug23912 @@ -0,0 +1,24 @@ +puts "============" +puts "OCC23912" +puts "============" +puts "" +################################################################################################################### +# TDataStd_ExtStringArray::Value() returns a copy of TCollection_ExtededString, but it might return a reference +################################################################################################################### + +NewDocument D +SetExtStringArray D 0:1 0 1 5 "A" "B" "C" "D" "E" +set info [GetExtStringArray D 0:1] + +if { [regexp "A B C D E" $info] != 1 } { + puts "Error : function returns wrong value" +} else { + puts "OK : function works properly" +} + + + + + + +