1 // File: TDataStd_IntPackedMap.cxx
2 // Created: Tue Jul 31 17:29:51 2007
3 // Author: Sergey ZARITCHNY
4 // <sergey.zaritchny@opencascade.com>
5 //Copyright: Open CasCade SA 2007
8 #include <TDataStd_IntPackedMap.ixx>
9 #include <TColStd_PackedMapOfInteger.hxx>
10 #include <TColStd_HPackedMapOfInteger.hxx>
11 #include <TDF_DefaultDeltaOnModification.hxx>
12 #include <TDataStd_DeltaOnModificationOfIntPackedMap.hxx>
13 #include <Standard_GUID.hxx>
14 #include <TDF_Label.hxx>
15 #include <TDF_Attribute.hxx>
16 //=======================================================================
19 //=======================================================================
21 const Standard_GUID& TDataStd_IntPackedMap::GetID()
23 static Standard_GUID theGUID ("7031faff-161e-44df-8239-7c264a81f5a1");
27 //=======================================================================
30 //=======================================================================
32 Handle(TDataStd_IntPackedMap) TDataStd_IntPackedMap::Set (const TDF_Label& theLabel,
33 const Standard_Boolean isDelta)
35 Handle(TDataStd_IntPackedMap) anAtt;
36 if (!theLabel.FindAttribute(TDataStd_IntPackedMap::GetID(), anAtt))
38 anAtt = new TDataStd_IntPackedMap;
40 anAtt->SetDelta(isDelta);
41 theLabel.AddAttribute(anAtt);
45 //=======================================================================
46 //function : Constructor
48 //=======================================================================
49 TDataStd_IntPackedMap::TDataStd_IntPackedMap ()
50 :myIsDelta(Standard_False)
52 myMap = new TColStd_HPackedMapOfInteger ();
54 //=======================================================================
55 //function : ChangeMap
57 //=======================================================================
59 Standard_Boolean TDataStd_IntPackedMap::ChangeMap (const Handle(TColStd_HPackedMapOfInteger)& theMap)
61 if(theMap.IsNull()) return Standard_False;
64 if (!myMap->Map().IsEqual(theMap->Map()))
67 myMap->ChangeMap().Assign(theMap->Map());
71 return Standard_False;
73 //=======================================================================
76 //=======================================================================
78 Standard_Boolean TDataStd_IntPackedMap::Clear ()
80 if (!myMap->Map().IsEmpty())
83 myMap = new TColStd_HPackedMapOfInteger;
86 return Standard_False;
89 //=======================================================================
92 //=======================================================================
93 Standard_Boolean TDataStd_IntPackedMap::Contains(const Standard_Integer theKey) const
95 return myMap->Map().Contains(theKey);
98 //=======================================================================
101 //=======================================================================
103 Standard_Boolean TDataStd_IntPackedMap::Add(const Standard_Integer theKey)
105 Standard_Boolean aResult = !myMap->Map().Contains(theKey);
109 aResult = myMap->ChangeMap().Add(theKey);
113 //=======================================================================
116 //=======================================================================
118 Standard_Boolean TDataStd_IntPackedMap::Remove(const Standard_Integer theKey)
120 Standard_Boolean aResult = myMap->Map().Contains(theKey);
124 aResult = myMap->ChangeMap().Remove(theKey);
129 //=======================================================================
130 //function : NewEmpty
132 //=======================================================================
134 Handle(TDF_Attribute) TDataStd_IntPackedMap::NewEmpty () const
136 return new TDataStd_IntPackedMap;
139 //=======================================================================
142 //=======================================================================
144 void TDataStd_IntPackedMap::Restore (const Handle(TDF_Attribute)& theWith)
146 Handle(TDataStd_IntPackedMap) aWith =
147 Handle(TDataStd_IntPackedMap)::DownCast(theWith);
148 if (aWith->myMap.IsNull())
152 myMap = new TColStd_HPackedMapOfInteger;
153 myMap->ChangeMap().Assign(aWith->myMap->Map());
154 myIsDelta = aWith->myIsDelta;
158 //=======================================================================
161 //=======================================================================
163 void TDataStd_IntPackedMap::Paste (const Handle(TDF_Attribute)& theInto,
164 const Handle(TDF_RelocationTable)&) const
166 Handle(TDataStd_IntPackedMap) anInto =
167 Handle(TDataStd_IntPackedMap)::DownCast(theInto);
168 if(!anInto.IsNull()) {
169 anInto->ChangeMap(myMap);
170 anInto->SetDelta(myIsDelta);
174 //=======================================================================
177 //=======================================================================
178 const Standard_GUID& TDataStd_IntPackedMap::ID() const
181 //=======================================================================
184 //=======================================================================
186 Standard_OStream& TDataStd_IntPackedMap::Dump(Standard_OStream& theOS) const
188 Standard_OStream& anOS = TDF_Attribute::Dump( theOS );
189 anOS << "IntPackedMap size = " << Extent();
190 anOS << " Delta is " << myIsDelta ? "ON":"OFF";
195 //=======================================================================
196 //function : DeltaOnModification
198 //=======================================================================
200 Handle(TDF_DeltaOnModification) TDataStd_IntPackedMap::DeltaOnModification
201 (const Handle(TDF_Attribute)& OldAttribute) const
204 return new TDataStd_DeltaOnModificationOfIntPackedMap(*((Handle(TDataStd_IntPackedMap)*)&OldAttribute));
205 else return new TDF_DefaultDeltaOnModification(OldAttribute);