void TDataStd_ReferenceArray::Init(const Standard_Integer lower,
const Standard_Integer upper)
{
+ Standard_RangeError_Raise_if(upper < lower,"TDataStd_ReferenceArray::Init");
Backup();
-
- if (upper >= lower)
- myArray = new TDataStd_HLabelArray1(lower, upper);
+ myArray = new TDataStd_HLabelArray1(lower, upper);
}
//=======================================================================
//function : SetInternalArray
//purpose :
//=======================================================================
-void TDataStd_ReferenceArray::SetInternalArray (const Handle(TDataStd_HLabelArray1)& values)
+void TDataStd_ReferenceArray::SetInternalArray (const Handle(TDataStd_HLabelArray1)& values,
+ const Standard_Boolean isCheckItem)
{
- myArray = values;
+// myArray = values;
+ Standard_Integer aLower = values->Lower();
+ Standard_Integer anUpper = values->Upper();
+ Standard_Boolean aDimEqual = Standard_False;
+ Standard_Integer i;
+
+#ifdef OCC2932
+ if (Lower() == aLower && Upper() == anUpper ) {
+ aDimEqual = Standard_True;
+ Standard_Boolean isEqual = Standard_True;
+ if(isCheckItems) {
+ for(i = aLower; i <= anUpper; i++) {
+ if(myArray->Value(i) != values->Value(i)) {
+ isEqual = Standard_False;
+ break;
+ }
+ }
+ if(isEqual)
+ return;
+ }
+ }
+#endif
+
+ Backup();
+
+ if(myArray.IsNull() || !aDimEqual)
+ myArray = new TDataStd_HLabelArray1(aLower, anUpper);
+
+ for(i = aLower; i <= anUpper; i++)
+ myArray->SetValue(i, values->Value(i));
}
//=======================================================================
//=======================================================================
const Standard_GUID& TDataStd_ReferenceArray::ID () const
{
- return GetID();
+ return GetID();
}
//=======================================================================