0024927: Getting rid of "Persistent" functionality -- Code
[occt.git] / src / MDF / MDF.cxx
1 // Created by: DAUTRY Philippe
2 // Copyright (c) 1997-1999 Matra Datavision
3 // Copyright (c) 1999-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 //              ---------
17
18 // Version:     0.0
19 //Version       Date            Purpose
20 //              0.0     Mar 13 1997     Creation
21
22
23
24 #include <MDF.ixx>
25
26 #include <TDF_Attribute.hxx>
27 #include <TDF_Label.hxx>
28 #include <TDF_Tool.hxx>
29
30 #include <MDF_RRelocationTable.hxx>
31 #include <MDF_SRelocationTable.hxx>
32 #include <MDF_Tool.hxx>
33 #include <MDF_TypeARDriverMap.hxx>
34 #include <MDF_TypeASDriverMap.hxx>
35
36 #include <PDF_Attribute.hxx>
37 #include <PDF_HAttributeArray1.hxx>
38
39 #include <PColStd_HArray1OfInteger.hxx>
40
41 #include <PTColStd_TransientPersistentMap.hxx>
42
43 #include <MDF_TagSourceStorageDriver.hxx>
44 #include <MDF_TagSourceRetrievalDriver.hxx>
45 #include <MDF_ReferenceStorageDriver.hxx>
46 #include <MDF_ReferenceRetrievalDriver.hxx>
47 #include <CDM_MessageDriver.hxx>
48
49 //=======================================================================
50 //function : FromTo
51 //purpose  : From TRANSIENT to PERSISTENT.
52 //=======================================================================
53
54 void MDF::FromTo
55 (const Handle(TDF_Data)& aSource,
56  Handle(PDF_Data)& aTarget,
57  const Handle(MDF_ASDriverTable)& aDriverTable,
58  const Handle(MDF_SRelocationTable)& aReloc,
59  const Standard_Integer aVersion) 
60 {
61   // Into Data.
62   aTarget = new PDF_Data(aVersion);
63
64   // Extraction of the driver subset.
65   const MDF_TypeASDriverMap& driverMap =
66     aDriverTable->GetDrivers(aVersion);
67
68   // Translation.
69   MDF_Tool::WriteLabels(aSource, aTarget, driverMap, aReloc);
70   MDF_Tool::WriteAttributes(driverMap, aReloc);
71 }
72
73
74 //=======================================================================
75 //function : FromTo
76 //purpose  : From PERSISTENT to TRANSIENT.
77 //=======================================================================
78
79 void MDF::FromTo
80 (const Handle(PDF_Data)& aSource,
81  Handle(TDF_Data)& aTarget,
82  const Handle(MDF_ARDriverTable)& aDriverTable,
83  const Handle(MDF_RRelocationTable)& aReloc) 
84 {
85   // Version number.
86   Standard_Integer version = aSource->VersionNumber();
87
88   // Extraction of the driver subset.
89   const MDF_TypeARDriverMap& driverMap =
90     aDriverTable->GetDrivers(version);
91
92   // Translation.
93   MDF_Tool::ReadLabels(aSource, aTarget, driverMap, aReloc);
94   MDF_Tool::ReadAttributes(driverMap, aReloc);
95 }
96
97 //=======================================================================
98 //function : AddStorageDriver
99 //purpose  : 
100 //=======================================================================
101
102 void MDF::AddStorageDrivers
103 (const Handle(MDF_ASDriverHSequence)& theDriverSeq,const Handle(CDM_MessageDriver)& theMsgDriver)
104 {
105   theDriverSeq->Append(new MDF_TagSourceStorageDriver(theMsgDriver)); 
106   theDriverSeq->Append(new MDF_ReferenceStorageDriver(theMsgDriver));
107 }
108
109
110 //=======================================================================
111 //function : AddRetrievalDriver
112 //purpose  : 
113 //=======================================================================
114
115 void MDF::AddRetrievalDrivers
116 (const Handle(MDF_ARDriverHSequence)& theDriverSeq, const Handle(CDM_MessageDriver)& theMsgDriver)
117 {
118   theDriverSeq->Append(new MDF_TagSourceRetrievalDriver(theMsgDriver)); 
119   theDriverSeq->Append(new MDF_ReferenceRetrievalDriver(theMsgDriver));
120 }
121