-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-
-// File: Model_AttributeTables.cpp
-// Created: 14 Nov 2016
-// Author: Mikhail Ponikarov
+// Copyright (C) 2014-2017 CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or
+// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+//
#include "Model_AttributeTables.h"
Handle(TColStd_HArray1OfReal) anOldDouble, aNewDouble =
(myType == ModelAPI_AttributeTables::DOUBLE) ?
new TColStd_HArray1OfReal(0, aNewSize - 1) : Handle(TColStd_HArray1OfReal)();
- Handle(TColStd_HArray1OfByte) anOldBool, aNewBool =
- (myType == ModelAPI_AttributeTables::BOOLEAN) ?
- new TColStd_HArray1OfByte(0, aNewSize - 1) : Handle(TColStd_HArray1OfByte)();
+ bool* anOldBool = 0; // an not work with internal arrays because of different indexing
+ Handle(TDataStd_BooleanArray) aBoolArray; // an existing array
Handle(TColStd_HArray1OfInteger) anOldInt, aNewInt =
(myType == ModelAPI_AttributeTables::INTEGER) ?
new TColStd_HArray1OfInteger(0, aNewSize - 1) : Handle(TColStd_HArray1OfInteger)();
case ModelAPI_AttributeTables::DOUBLE:
anOldDouble = Handle(TDataStd_RealArray)::DownCast(anArray)->Array();
break;
- case ModelAPI_AttributeTables::BOOLEAN:
- anOldBool = Handle(TDataStd_BooleanArray)::DownCast(anArray)->InternalArray();
+ case ModelAPI_AttributeTables::BOOLEAN: {
+ anOldBool = new bool[aSize];
+ aBoolArray = Handle(TDataStd_BooleanArray)::DownCast(anArray);
+ for(int a = 0; a < aSize; a++)
+ anOldBool[a] = aBoolArray->Value(a);
+ aBoolArray->Init(0, aNewSize - 1);
break;
+ }
case ModelAPI_AttributeTables::INTEGER:
anOldInt = Handle(TDataStd_IntegerArray)::DownCast(anArray)->Array();
break;
anOldStr = Handle(TDataStd_ExtStringArray)::DownCast(anArray)->Array();
break;
}
+ } else if (myType == ModelAPI_AttributeTables::BOOLEAN) {
+ aBoolArray = TDataStd_BooleanArray::Set(myLab, 0, aNewSize - 1);
}
for(int aTable = 0; aTable < theTables; aTable++) {
for(int aColumn = 0; aColumn < theColumns; aColumn++) {
break;
}
case ModelAPI_AttributeTables::BOOLEAN: {
- aNewBool->SetValue(anIndex, aRestore ? anOldBool->Value(anOldIndex) : Standard_False);
+ aBoolArray->SetValue(anIndex, aRestore ? anOldBool[anOldIndex] : Standard_False);
break;
}
case ModelAPI_AttributeTables::INTEGER: {
case ModelAPI_AttributeTables::DOUBLE:
TDataStd_RealArray::Set(myLab, 0, aNewSize - 1)->ChangeArray(aNewDouble);
break;
- case ModelAPI_AttributeTables::BOOLEAN:
- TDataStd_BooleanArray::Set(myLab, 0, aNewSize - 1)->SetInternalArray(aNewBool);
+ case ModelAPI_AttributeTables::BOOLEAN: // nothing to do: array was set in "else" of restore
break;
case ModelAPI_AttributeTables::INTEGER:
TDataStd_IntegerArray::Set(myLab, 0, aNewSize - 1)->ChangeArray(aNewInt);
// remove the old attr
int aSize = myRows * myCols * myTables;
if (aSize != 0) {
- myLab.ForgetAttribute(MY_ARRAY_ID(theType));
+ myLab.ForgetAttribute(MY_ARRAY_ID(myType));
myType = theType;
int aTables = myTables;
myTables = 0; // to let setSize know that there is no old array