Integration of OCCT 6.5.0 from SVN
[occt.git] / src / BinMDataStd / BinMDataStd_RealArrayDriver.cxx
CommitLineData
7fd59977 1// File: BinMDataStd_RealArrayDriver.cxx
2// Created: 31.10.02 20:42:59
3// Author: Michael SAZONOV
4// Copyright: Open CASCADE 2002
5
6#include <BinMDataStd_RealArrayDriver.ixx>
7#include <TDataStd_RealArray.hxx>
8#include <TColStd_HArray1OfReal.hxx>
9#include <BinMDataStd.hxx>
10
11//=======================================================================
12//function : BinMDataStd_RealArrayDriver
13//purpose : Constructor
14//=======================================================================
15
16BinMDataStd_RealArrayDriver::BinMDataStd_RealArrayDriver
17 (const Handle(CDM_MessageDriver)& theMsgDriver)
18 : BinMDF_ADriver (theMsgDriver, STANDARD_TYPE(TDataStd_RealArray)->Name())
19{
20}
21
22//=======================================================================
23//function : NewEmpty
24//purpose :
25//=======================================================================
26
27Handle(TDF_Attribute) BinMDataStd_RealArrayDriver::NewEmpty() const
28{
29 return new TDataStd_RealArray();
30}
31
32//=======================================================================
33//function : Paste
34//purpose : persistent -> transient (retrieve)
35//=======================================================================
36
37Standard_Boolean BinMDataStd_RealArrayDriver::Paste
38 (const BinObjMgt_Persistent& theSource,
39 const Handle(TDF_Attribute)& theTarget,
40 BinObjMgt_RRelocationTable& ) const
41{
42 Standard_Integer aFirstInd, aLastInd;
43 if (! (theSource >> aFirstInd >> aLastInd))
44 return Standard_False;
45 const Standard_Integer aLength = aLastInd - aFirstInd + 1;
46 if (aLength <= 0)
47 return Standard_False;
48
49 Handle(TDataStd_RealArray) anAtt =
50 Handle(TDataStd_RealArray)::DownCast(theTarget);
51 anAtt->Init(aFirstInd, aLastInd);
52 TColStd_Array1OfReal& aTargetArray = anAtt->Array()->ChangeArray1();
53 if(!theSource.GetRealArray (&aTargetArray(aFirstInd), aLength))
54 return Standard_False;
55#ifdef DEB
56 //cout << "CurDocVersion = " << BinMDataStd::DocumentVersion() <<endl;
57#endif
58 Standard_Boolean aDelta(Standard_False);
59 if(BinMDataStd::DocumentVersion() > 2) {
60 Standard_Byte aDeltaValue;
61 if (! (theSource >> aDeltaValue))
62 return Standard_False;
63 else
64 aDelta = (Standard_Boolean)aDeltaValue;
65 }
66 anAtt->SetDelta(aDelta);
67 return Standard_True;
68}
69
70//=======================================================================
71//function : Paste
72//purpose : transient -> persistent (store)
73//=======================================================================
74
75void BinMDataStd_RealArrayDriver::Paste
76 (const Handle(TDF_Attribute)& theSource,
77 BinObjMgt_Persistent& theTarget,
78 BinObjMgt_SRelocationTable& ) const
79{
80 Handle(TDataStd_RealArray) anAtt =
81 Handle(TDataStd_RealArray)::DownCast(theSource);
82 const TColStd_Array1OfReal& aSourceArray = anAtt->Array()->Array1();
83 const Standard_Integer aFirstInd = aSourceArray.Lower();
84 const Standard_Integer aLastInd = aSourceArray.Upper();
85 const Standard_Integer aLength = aLastInd - aFirstInd + 1;
86 theTarget << aFirstInd << aLastInd;
87 Standard_Real *aPtr = (Standard_Real *) &aSourceArray(aFirstInd);
88 theTarget.PutRealArray (aPtr, aLength);
89 theTarget << (Standard_Byte)anAtt->GetDelta();
90}