Integration of OCCT 6.5.0 from SVN
[occt.git] / src / MDataStd / MDataStd_ExpressionStorageDriver.cxx
CommitLineData
7fd59977 1#include <MDataStd_ExpressionStorageDriver.ixx>
2#include <PDataStd_Expression.hxx>
3#include <TDataStd_Expression.hxx>
4#include <TCollection_ExtendedString.hxx>
5#include <PCollection_HExtendedString.hxx>
6#include <TDF_ListIteratorOfAttributeList.hxx>
7#include <PDF_HAttributeArray1.hxx>
8#include <Standard_NoSuchObject.hxx>
9#include <CDM_MessageDriver.hxx>
10
11//=======================================================================
12//function : MDataStd_ExpressionStorageDriver
13//purpose :
14//=======================================================================
15
16MDataStd_ExpressionStorageDriver::MDataStd_ExpressionStorageDriver(const Handle(CDM_MessageDriver)& theMsgDriver):MDF_ASDriver(theMsgDriver)
17{
18}
19
20//=======================================================================
21//function : VersionNumber
22//purpose :
23//=======================================================================
24
25Standard_Integer MDataStd_ExpressionStorageDriver::VersionNumber() const
26{ return 0; }
27
28//=======================================================================
29//function : SourceType
30//purpose :
31//=======================================================================
32
33Handle(Standard_Type) MDataStd_ExpressionStorageDriver::SourceType() const
34{ return STANDARD_TYPE(TDataStd_Expression);}
35
36//=======================================================================
37//function : NewEmpty
38//purpose :
39//=======================================================================
40
41Handle(PDF_Attribute) MDataStd_ExpressionStorageDriver::NewEmpty() const
42{ return new PDataStd_Expression; }
43
44//=======================================================================
45//function : Paste
46//purpose :
47//=======================================================================
48
49void MDataStd_ExpressionStorageDriver::Paste(const Handle(TDF_Attribute)& Source,
50 const Handle(PDF_Attribute)& Target,
51 const Handle(MDF_SRelocationTable)& RelocTable) const
52{
53 Handle(TDataStd_Expression) S = Handle(TDataStd_Expression)::DownCast (Source);
54 Handle(PDataStd_Expression) T = Handle(PDataStd_Expression)::DownCast (Target);
55 Handle(PCollection_HExtendedString) Expression = new PCollection_HExtendedString (S->Name());
56 T->SetName (Expression);
57
58 Handle(TDF_Attribute) TV;
59 Handle(PDF_Attribute) PV;
60 Standard_Integer nbvar = S->GetVariables().Extent();
61 if (nbvar <= 0) return;
62 Handle(PDF_HAttributeArray1) PVARS = new PDF_HAttributeArray1 (1, nbvar);
63 TDF_ListIteratorOfAttributeList it;
64 Standard_Integer index = 0;
65 for (it.Initialize(S->GetVariables());it.More();it.Next()) {
66 index++;
67 TV = it.Value();
68 if(!RelocTable->HasRelocation (TV, PV)) {
69 Standard_NoSuchObject::Raise("MDataStd_ExpressionStorageDriver::Paste");
70 }
71 PVARS->SetValue (index,PV);
72 }
73 T->SetVariables (PVARS);
74}
75