0031313: Foundation Classes - Dump improvement for classes
[occt.git] / src / TDataStd / TDataStd_Expression.cxx
1 // Created on: 1997-12-16
2 // Created by: Denis PASCAL
3 // Copyright (c) 1997-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #include <TDataStd_Expression.hxx>
18
19 #include <Standard_Dump.hxx>
20 #include <Standard_GUID.hxx>
21 #include <Standard_Type.hxx>
22 #include <TCollection_AsciiString.hxx>
23 #include <TCollection_ExtendedString.hxx>
24 #include <TDataStd_Variable.hxx>
25 #include <TDF_Attribute.hxx>
26 #include <TDF_Label.hxx>
27 #include <TDF_ListIteratorOfAttributeList.hxx>
28 #include <TDF_RelocationTable.hxx>
29
30 IMPLEMENT_STANDARD_RTTIEXT(TDataStd_Expression,TDF_Attribute)
31
32 //=======================================================================
33 //function : GetID
34 //purpose  : 
35 //=======================================================================
36 const Standard_GUID& TDataStd_Expression::GetID() 
37 {  
38   static Standard_GUID TDataStd_ExpressionID("ce24146a-8e57-11d1-8953-080009dc4425");
39   return TDataStd_ExpressionID;
40 }
41
42 //=======================================================================
43 //function : Set
44 //purpose  : 
45 //=======================================================================
46
47 Handle(TDataStd_Expression) TDataStd_Expression::Set(const TDF_Label& L) 
48 {  
49   Handle(TDataStd_Expression) A;
50   if (!L.FindAttribute (TDataStd_Expression::GetID(), A)) {
51     A = new TDataStd_Expression (); 
52     L.AddAttribute(A);
53   }
54   return A;
55 }
56
57 //=======================================================================
58 //function : TDataStd_Expression
59 //purpose  : 
60 //=======================================================================
61
62 TDataStd_Expression::TDataStd_Expression()
63 {
64 }
65
66
67 //=======================================================================
68 //function : Name
69 //purpose  : 
70 //=======================================================================
71 TCollection_ExtendedString TDataStd_Expression::Name () const 
72 {  
73   return myExpression; // ->String();
74 }
75
76 //=======================================================================
77 //function : SetExpression
78 //purpose  : 
79 //=======================================================================
80
81 void TDataStd_Expression::SetExpression(const TCollection_ExtendedString& E)
82 {
83   // OCC2932 correction
84   if(myExpression == E) return;
85
86   Backup();
87   myExpression = E;
88 }
89
90 //=======================================================================
91 //function : GetExpression
92 //purpose  : 
93 //=======================================================================
94
95 const TCollection_ExtendedString& TDataStd_Expression::GetExpression () const
96 {
97   return myExpression;
98 }
99
100 //=======================================================================
101 //function : GetVariables
102 //purpose  : 
103 //=======================================================================
104
105 TDF_AttributeList& TDataStd_Expression::GetVariables()
106 {
107   return myVariables;
108 }
109
110 //=======================================================================
111 //function : ID
112 //purpose  : 
113 //=======================================================================
114
115 const Standard_GUID& TDataStd_Expression::ID() const
116 {
117   return GetID();
118 }
119
120 //=======================================================================
121 //function : Restore
122 //purpose  : 
123 //=======================================================================
124
125 void TDataStd_Expression::Restore(const Handle(TDF_Attribute)& With) 
126 {  
127   Handle(TDataStd_Expression) EXPR = Handle(TDataStd_Expression)::DownCast (With);
128   myExpression = EXPR->GetExpression();
129
130   Handle(TDataStd_Variable) V;
131   for (TDF_ListIteratorOfAttributeList it (EXPR->GetVariables()); it.More(); it.Next()) {
132     V = Handle(TDataStd_Variable)::DownCast(it.Value());
133     myVariables.Append(V);
134   }
135 }
136
137 //=======================================================================
138 //function : NewEmpty
139 //purpose  : 
140 //=======================================================================
141
142 Handle(TDF_Attribute) TDataStd_Expression::NewEmpty() const
143 {
144   return new TDataStd_Expression();
145 }
146
147 //=======================================================================
148 //function : Paste
149 //purpose  : 
150 //=======================================================================
151
152 void TDataStd_Expression::Paste(const Handle(TDF_Attribute)& Into,
153                                  const Handle(TDF_RelocationTable)& RT) const
154 {  
155   Handle(TDataStd_Expression) EXPR = Handle(TDataStd_Expression)::DownCast (Into); 
156   EXPR->SetExpression(myExpression);  
157   Handle(TDataStd_Variable) V1;
158   for (TDF_ListIteratorOfAttributeList it (myVariables); it.More(); it.Next()) {
159     V1 = Handle(TDataStd_Variable)::DownCast(it.Value());
160     Handle(TDF_Attribute) V2;
161     RT->HasRelocation (V1,V2);
162     EXPR->GetVariables().Append(V2);
163   }
164 }
165
166 //=======================================================================
167 //function : Dump
168 //purpose  : 
169 //=======================================================================
170
171 Standard_OStream& TDataStd_Expression::Dump(Standard_OStream& anOS) const
172
173   anOS << "Expression";
174   return anOS;
175 }
176
177 //=======================================================================
178 //function : DumpJson
179 //purpose  : 
180 //=======================================================================
181 void TDataStd_Expression::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
182 {
183   OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
184
185   OCCT_DUMP_BASE_CLASS (theOStream, theDepth, TDF_Attribute)
186
187   OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myExpression)
188
189   for (TDF_AttributeList::Iterator aVariableIt (myVariables); aVariableIt.More(); aVariableIt.Next())
190   {
191     const Handle(TDF_Attribute)& anAttribute = aVariableIt.Value();
192     OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, anAttribute.get())
193   }
194 }