Integration of OCCT 6.5.0 from SVN
[occt.git] / src / MDataStd / MDataStd_TreeNodeRetrievalDriver.cxx
1 // File:        MDataStd_TreeNodeRetrievalDriver.cxx
2 // Created:     Thu Jun 17 12:11:20 1999
3 // Author:      Vladislav ROMASHKO
4 //              <vro@flox.nnov.matra-dtv.fr>
5
6
7 #include <MDataStd_TreeNodeRetrievalDriver.ixx>
8 #include <PDataStd_TreeNode.hxx>
9 #include <TDataStd_TreeNode.hxx>
10 #include <Standard_NoSuchObject.hxx>
11 #include <TDF_Label.hxx>
12 #include <CDM_MessageDriver.hxx>
13
14 MDataStd_TreeNodeRetrievalDriver::MDataStd_TreeNodeRetrievalDriver(const Handle(CDM_MessageDriver)& theMsgDriver):MDF_ARDriver(theMsgDriver)
15 {}
16
17 Standard_Integer MDataStd_TreeNodeRetrievalDriver::VersionNumber() const
18 { return 0; }
19
20 Handle(Standard_Type) MDataStd_TreeNodeRetrievalDriver::SourceType() const
21 { return STANDARD_TYPE(PDataStd_TreeNode);  }
22
23 Handle(TDF_Attribute) MDataStd_TreeNodeRetrievalDriver::NewEmpty() const
24 { return new TDataStd_TreeNode(); }
25
26 void MDataStd_TreeNodeRetrievalDriver::Paste (const Handle(PDF_Attribute)&        Source,
27                                               const Handle(TDF_Attribute)&        Target,
28                                               const Handle(MDF_RRelocationTable)& RelocTable) const
29 {
30   Handle(PDataStd_TreeNode) S = Handle(PDataStd_TreeNode)::DownCast(Source);
31   Handle(TDataStd_TreeNode) T = Handle(TDataStd_TreeNode)::DownCast(Target);
32   T->SetTreeID(S->GetTreeID());
33
34    Handle(TDataStd_TreeNode) TFirst;
35    Handle(PDataStd_TreeNode) PFirst = S->First(); 
36    if (!PFirst.IsNull ()) {
37      if (!RelocTable->HasRelocation(PFirst, TFirst)) { 
38        Standard_NoSuchObject::Raise("MDataStd_TreeNodeRetrievalDriver::Paste");
39      }
40      if (!TFirst.IsNull()) {
41        TFirst->SetTreeID(S->GetTreeID());
42        T->Append(TFirst);
43        Handle(PDataStd_TreeNode) PNext = PFirst; 
44        Handle(TDataStd_TreeNode) TNext;
45        while (!(PNext->Next()).IsNull() ) {
46          PNext = PNext->Next(); 
47          if (!RelocTable->HasRelocation(PNext, TNext)) { 
48            Standard_NoSuchObject::Raise("MDataStd_TreeNodeRetrievalDriver::Paste");
49          }
50          if (!TNext.IsNull()) {
51            TNext->SetTreeID(S->GetTreeID());
52            T->Append(TNext);
53          }
54        }
55      }
56    }
57 }