0024927: Getting rid of "Persistent" functionality -- Code
[occt.git] / src / MDataStd / MDataStd_ReferenceListStorageDriver.cxx
1 // Created on: 2007-05-29
2 // Created by: Vlad Romashko
3 // Copyright (c) 2007-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #include <MDataStd_ReferenceListStorageDriver.ixx>
17 #include <PDataStd_ReferenceList.hxx>
18 #include <TDataStd_ReferenceList.hxx>
19 #include <MDataStd.hxx>
20 #include <CDM_MessageDriver.hxx>
21 #include <TDF_ListIteratorOfLabelList.hxx>
22 #include <TDF_Tool.hxx>
23 #include <TDF_Label.hxx>
24 #include <PCollection_HExtendedString.hxx>
25
26 //=======================================================================
27 //function : MDataStd_ReferenceListStorageDriver
28 //purpose  : 
29 //=======================================================================
30 MDataStd_ReferenceListStorageDriver::MDataStd_ReferenceListStorageDriver(const Handle(CDM_MessageDriver)& theMsgDriver):MDF_ASDriver(theMsgDriver)
31 {
32
33 }
34
35 //=======================================================================
36 //function : VersionNumber
37 //purpose  : 
38 //=======================================================================
39 Standard_Integer MDataStd_ReferenceListStorageDriver::VersionNumber() const
40
41   return 0;
42 }
43
44
45 //=======================================================================
46 //function : SourceType
47 //purpose  : 
48 //=======================================================================
49 Handle(Standard_Type) MDataStd_ReferenceListStorageDriver::SourceType() const
50 {
51   static Handle(Standard_Type) sourceType = STANDARD_TYPE(TDataStd_ReferenceList);
52   return sourceType;
53 }
54
55 //=======================================================================
56 //function : NewEmpty
57 //purpose  : 
58 //=======================================================================
59 Handle(PDF_Attribute) MDataStd_ReferenceListStorageDriver::NewEmpty() const 
60 {
61   return new PDataStd_ReferenceList();
62 }
63
64 //=======================================================================
65 //function : Paste
66 //purpose  : 
67 //=======================================================================
68 void MDataStd_ReferenceListStorageDriver::Paste(const Handle(TDF_Attribute)&  Source,
69                                                 const Handle(PDF_Attribute)&        Target,
70                                                 const Handle(MDF_SRelocationTable)& /*RelocTable*/) const
71 {
72   const Handle(TDataStd_ReferenceList) S = Handle(TDataStd_ReferenceList)::DownCast (Source);
73   const Handle(PDataStd_ReferenceList) T = Handle(PDataStd_ReferenceList)::DownCast (Target);
74   if(S.IsNull()) return;
75   Standard_Integer lower(1), upper = S->Extent();
76   if(upper == 0) {
77     lower = 0;
78     T->Init(lower, upper);
79   }
80   else if (upper >= lower)
81   {
82     T->Init(lower, upper);
83     TDF_ListIteratorOfLabelList itr(S->List());
84     for (Standard_Integer i = lower; itr.More(); itr.Next(), i++) 
85     {
86       TDF_Label L = itr.Value();
87       if (!L.IsNull())
88       {
89         TCollection_AsciiString tvalue;
90         TDF_Tool::Entry(L, tvalue);
91         const Handle(PCollection_HExtendedString)& pvalue = new PCollection_HExtendedString(tvalue);
92         T->SetValue(i, pvalue);
93       }
94     }
95   }
96 }