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>
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>
14 MDataStd_TreeNodeRetrievalDriver::MDataStd_TreeNodeRetrievalDriver(const Handle(CDM_MessageDriver)& theMsgDriver):MDF_ARDriver(theMsgDriver)
17 Standard_Integer MDataStd_TreeNodeRetrievalDriver::VersionNumber() const
20 Handle(Standard_Type) MDataStd_TreeNodeRetrievalDriver::SourceType() const
21 { return STANDARD_TYPE(PDataStd_TreeNode); }
23 Handle(TDF_Attribute) MDataStd_TreeNodeRetrievalDriver::NewEmpty() const
24 { return new TDataStd_TreeNode(); }
26 void MDataStd_TreeNodeRetrievalDriver::Paste (const Handle(PDF_Attribute)& Source,
27 const Handle(TDF_Attribute)& Target,
28 const Handle(MDF_RRelocationTable)& RelocTable) const
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());
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");
40 if (!TFirst.IsNull()) {
41 TFirst->SetTreeID(S->GetTreeID());
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");
50 if (!TNext.IsNull()) {
51 TNext->SetTreeID(S->GetTreeID());