0025266: Debug statements in the source are getting flushed on to the console
[occt.git] / src / TDataStd / TDataStd_DeltaOnModificationOfIntArray.cxx
CommitLineData
b311480e 1// Created on: 2007-09-06
2// Created by: Sergey ZARITCHNY
973c2be1 3// Copyright (c) 2007-2014 OPEN CASCADE SAS
b311480e 4//
973c2be1 5// This file is part of Open CASCADE Technology software library.
b311480e 6//
d5f74e42 7// This library is free software; you can redistribute it and/or modify it under
8// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 9// by the Free Software Foundation, with special exception defined in the file
10// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11// distribution for complete text of the license and disclaimer of any warranty.
b311480e 12//
973c2be1 13// Alternatively, this file may be used under the terms of Open CASCADE
14// commercial license or contractual agreement.
7fd59977 15
16#include <TDataStd_DeltaOnModificationOfIntArray.ixx>
17#include <TDataStd_IntegerArray.hxx>
18#include <TDF_DeltaOnModification.hxx>
19#include <TDF_Label.hxx>
20#include <TColStd_HArray1OfInteger.hxx>
21#include <TColStd_ListOfInteger.hxx>
22#include <TColStd_ListIteratorOfListOfInteger.hxx>
23#include <TDF_AttributeIterator.hxx>
24#ifdef DEB
25#define MAXUP 1000
26#endif
27//=======================================================================
28//function : TDataStd_DeltaOnModificationOfIntArray
29//purpose :
30//=======================================================================
31
32TDataStd_DeltaOnModificationOfIntArray::TDataStd_DeltaOnModificationOfIntArray(const Handle(TDataStd_IntegerArray)& OldAtt)
33: TDF_DeltaOnModification(OldAtt)
34{
35 Handle(TDataStd_IntegerArray) CurrAtt;
36 if (Label().FindAttribute(OldAtt->ID(),CurrAtt)) {
37 {
38 Handle(TColStd_HArray1OfInteger) Arr1, Arr2;
39 Arr1 = OldAtt->Array();
40 Arr2 = CurrAtt->Array();
63c629aa 41#ifdef TDATASTD_DEB
7fd59977 42 if(Arr1.IsNull())
43 cout <<"DeltaOnModificationOfIntArray:: Old IntArray is Null" <<endl;
44 if(Arr2.IsNull())
45 cout <<"DeltaOnModificationOfIntArray:: Current IntArray is Null" <<endl;
46#endif
47
48 if(Arr1.IsNull() || Arr2.IsNull()) return;
49 if(Arr1 != Arr2) {
50 myUp1 = Arr1->Upper();
51 myUp2 = Arr2->Upper();
52 Standard_Integer i, N=0, aCase=0;
53 if(myUp1 == myUp2)
54 {aCase = 1; N = myUp1;}
55 else if(myUp1 < myUp2)
56 {aCase = 2; N = myUp1;}
57 else
58 {aCase = 3; N = myUp2;}//Up1 > Up2
59
60 TColStd_ListOfInteger aList;
61 for(i=Arr1->Lower();i <= N; i++)
62 if(Arr1->Value(i) != Arr2->Value(i))
63 aList.Append(i);
64 if(aCase == 3) {
65 for(i = N+1;i <= myUp1; i++)
66 aList.Append(i);
67 }
68 if(aList.Extent()) {
69 myIndxes = new TColStd_HArray1OfInteger(1,aList.Extent());
70 myValues = new TColStd_HArray1OfInteger(1,aList.Extent());
71 TColStd_ListIteratorOfListOfInteger anIt(aList);
72 for(i=1;anIt.More();anIt.Next(),i++) {
73 myIndxes->SetValue(i, anIt.Value());
74 myValues->SetValue(i, Arr1->Value(anIt.Value()));
75 }
76 }
77 }
78 }
79 OldAtt->RemoveArray();
63c629aa 80#ifdef TDATASTD_DEB
7fd59977 81 if(OldAtt->Array().IsNull())
82 cout << "BackUp Arr is Nullified" << endl;
83#endif
84 }
85}
86
87
88//=======================================================================
89//function : Apply
90//purpose :
91//=======================================================================
92
93void TDataStd_DeltaOnModificationOfIntArray::Apply()
94{
95
96 Handle(TDF_Attribute) TDFAttribute = Attribute();
97 Handle(TDataStd_IntegerArray) BackAtt = (*((Handle(TDataStd_IntegerArray)*)&TDFAttribute));
98 if(BackAtt.IsNull()) {
63c629aa 99#ifdef TDATASTD_DEB
7fd59977 100 cout << "DeltaOnModificationOfIntArray::Apply: OldAtt is Null" <<endl;
101#endif
102 return;
103 }
104
105 Handle(TDataStd_IntegerArray) aCurAtt;
106 if (!Label().FindAttribute(BackAtt->ID(),aCurAtt)) {
107
108 Label().AddAttribute(BackAtt);
109 }
110
111 if(aCurAtt.IsNull()) {
63c629aa 112#ifdef TDATASTD_DEB
7fd59977 113 cout << "DeltaOnModificationOfIntArray::Apply: CurAtt is Null" <<endl;
114#endif
115 return;
116 }
117 else
118 aCurAtt->Backup();
119
120 Standard_Integer aCase;
121 if(myUp1 == myUp2)
122 aCase = 1;
123 else if(myUp1 < myUp2)
124 aCase = 2;
125 else
126 aCase = 3;//Up1 > Up2
127////
128 if (aCase == 1 && (myIndxes.IsNull() || myValues.IsNull()))
129 return;
130
131 Standard_Integer i;
132 Handle(TColStd_HArray1OfInteger) IntArr = aCurAtt->Array();
133 if(IntArr.IsNull()) return;
134 if(aCase == 1)
135 for(i = 1; i <= myIndxes->Upper();i++)
136 IntArr->ChangeArray1().SetValue(myIndxes->Value(i), myValues->Value(i));
137 else if(aCase == 2) {
138 Handle(TColStd_HArray1OfInteger) intArr = new TColStd_HArray1OfInteger(IntArr->Lower(), myUp1);
139 for(i = IntArr->Lower(); i <= myUp1 && i <= IntArr->Upper(); i++)
140 intArr->SetValue(i, IntArr->Value(i));
141 if(!myIndxes.IsNull() && !myValues.IsNull())
142 for(i = 1; i <= myIndxes->Upper();i++)
143 intArr->ChangeArray1().SetValue(myIndxes->Value(i), myValues->Value(i));
144 aCurAtt->myValue = intArr;
145 }
146 else { // aCase == 3
147 Standard_Integer low = IntArr->Lower();
148 Handle(TColStd_HArray1OfInteger) intArr = new TColStd_HArray1OfInteger(low, myUp1);
149 for(i = IntArr->Lower(); i <= myUp2 && i <= IntArr->Upper(); i++)
150 intArr->SetValue(i, IntArr->Value(i));
151 if(!myIndxes.IsNull() && !myValues.IsNull())
152 for(i = 1; i <= myIndxes->Upper();i++) {
63c629aa 153#ifdef TDATASTD_DEB
7fd59977 154 cout << "i = " << i << " myIndxes->Upper = " << myIndxes->Upper() << endl;
155 cout << "myIndxes->Value(i) = " << myIndxes->Value(i) << endl;
156 cout << "myValues->Value(i) = " << myValues->Value(i) << endl;
157#endif
158 intArr->ChangeArray1().SetValue(myIndxes->Value(i), myValues->Value(i));
159 }
160 aCurAtt->myValue = intArr;
161 }
162
63c629aa 163#ifdef TDATASTD_DEB
7fd59977 164 cout << " << Array Dump after Delta Apply >>" <<endl;
165 Handle(TColStd_HArray1OfInteger) IntArr2 = aCurAtt->Array();
166 for(i=IntArr2->Lower(); i<=IntArr2->Upper() && i <= MAXUP;i++)
167 cout << IntArr2->Value(i) << " ";
168 cout <<endl;
169#endif
170}
171
172