OCC18056 Exception during copying Array attribute with array(0,0)
[occt.git] / src / TDataStd / TDataStd_Expression.cxx
CommitLineData
7fd59977 1// File: TDataStd_Expression.cxx
2// Created: Tue Dec 16 17:33:32 1997
3// Author: Denis PASCAL
4// <dp@dingox.paris1.matra-dtv.fr>
5
6
7#include <TDataStd_Expression.ixx>
8#include <TCollection_AsciiString.hxx>
9#include <TDataStd_Variable.hxx>
10#include <TDF_ListIteratorOfAttributeList.hxx>
11
12//=======================================================================
13//function : GetID
14//purpose :
15//=======================================================================
16
17const Standard_GUID& TDataStd_Expression::GetID()
18{
19 static Standard_GUID TDataStd_ExpressionID("ce24146a-8e57-11d1-8953-080009dc4425");
20 return TDataStd_ExpressionID;
21}
22
23//=======================================================================
24//function : Set
25//purpose :
26//=======================================================================
27
28Handle(TDataStd_Expression) TDataStd_Expression::Set(const TDF_Label& L)
29{
30 Handle(TDataStd_Expression) A;
31 if (!L.FindAttribute (TDataStd_Expression::GetID(), A)) {
32 A = new TDataStd_Expression ();
33 L.AddAttribute(A);
34 }
35 return A;
36}
37
38//=======================================================================
39//function : TDataStd_Expression
40//purpose :
41//=======================================================================
42
43TDataStd_Expression::TDataStd_Expression()
44{
45}
46
47
48//=======================================================================
49//function : Name
50//purpose :
51//=======================================================================
52TCollection_ExtendedString TDataStd_Expression::Name () const
53{
54 return myExpression; // ->String();
55}
56
57//=======================================================================
58//function : SetExpression
59//purpose :
60//=======================================================================
61
62void TDataStd_Expression::SetExpression(const TCollection_ExtendedString& E)
63{
64 // OCC2932 correction
65 if(myExpression == E) return;
66
67 Backup();
68 myExpression = E;
69}
70
71//=======================================================================
72//function : GetExpression
73//purpose :
74//=======================================================================
75
76const TCollection_ExtendedString& TDataStd_Expression::GetExpression () const
77{
78 return myExpression;
79}
80
81//=======================================================================
82//function : GetVariables
83//purpose :
84//=======================================================================
85
86TDF_AttributeList& TDataStd_Expression::GetVariables()
87{
88 return myVariables;
89}
90
91//=======================================================================
92//function : ID
93//purpose :
94//=======================================================================
95
96const Standard_GUID& TDataStd_Expression::ID() const
97{
98 return GetID();
99}
100
101//=======================================================================
102//function : Restore
103//purpose :
104//=======================================================================
105
106void TDataStd_Expression::Restore(const Handle(TDF_Attribute)& With)
107{
108 Handle(TDataStd_Expression) EXPR = Handle(TDataStd_Expression)::DownCast (With);
109 myExpression = EXPR->GetExpression();
110
111 Handle(TDataStd_Variable) V;
112 for (TDF_ListIteratorOfAttributeList it (EXPR->GetVariables()); it.More(); it.Next()) {
113 V = Handle(TDataStd_Variable)::DownCast(it.Value());
114 myVariables.Append(V);
115 }
116}
117
118//=======================================================================
119//function : NewEmpty
120//purpose :
121//=======================================================================
122
123Handle(TDF_Attribute) TDataStd_Expression::NewEmpty() const
124{
125 return new TDataStd_Expression();
126}
127
128//=======================================================================
129//function : Paste
130//purpose :
131//=======================================================================
132
133void TDataStd_Expression::Paste(const Handle(TDF_Attribute)& Into,
134 const Handle(TDF_RelocationTable)& RT) const
135{
136 Handle(TDataStd_Expression) EXPR = Handle(TDataStd_Expression)::DownCast (Into);
137 EXPR->SetExpression(myExpression);
138 Handle(TDataStd_Variable) V1,V2;
139 for (TDF_ListIteratorOfAttributeList it (myVariables); it.More(); it.Next()) {
140 V1 = Handle(TDataStd_Variable)::DownCast(it.Value());
141 RT->HasRelocation (V1,V2);
142 EXPR->GetVariables().Append(V2);
143 }
144}
145
146//=======================================================================
147//function : Dump
148//purpose :
149//=======================================================================
150
151Standard_OStream& TDataStd_Expression::Dump(Standard_OStream& anOS) const
152{
153 anOS << "Expression";
154 return anOS;
155}
156