xref: /aoo41x/main/sd/source/core/sdiocmpt.cxx (revision 5b190011)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26 
27 
28 #include <tools/debug.hxx>
29 
30 #include "sdiocmpt.hxx"
31 
32 //////////////////////////////////////////////////////////////////////////////
33 
34 old_SdrDownCompat::old_SdrDownCompat(SvStream& rNewStream, sal_uInt16 nNewMode)
35 :	rStream(rNewStream),
36 	nSubRecSiz(0),
37 	nSubRecPos(0),
38 	nMode(nNewMode),
39 	bOpen(sal_False)
40 {
41 	OpenSubRecord();
42 }
43 
44 old_SdrDownCompat::~old_SdrDownCompat()
45 {
46 	if(bOpen)
47 		CloseSubRecord();
48 }
49 
50 void old_SdrDownCompat::Read()
51 {
52 	rStream >> nSubRecSiz;
53 }
54 
55 void old_SdrDownCompat::Write()
56 {
57 	rStream << nSubRecSiz;
58 }
59 
60 void old_SdrDownCompat::OpenSubRecord()
61 {
62 	if(rStream.GetError())
63 		return;
64 
65 	nSubRecPos = rStream.Tell();
66 
67 	if(nMode == STREAM_READ)
68 	{
69 		Read();
70 	}
71 	else if(nMode == STREAM_WRITE)
72 	{
73 		Write();
74 	}
75 
76 	bOpen = sal_True;
77 }
78 
79 void old_SdrDownCompat::CloseSubRecord()
80 {
81 	if(rStream.GetError())
82 		return;
83 
84 	sal_uInt32 nAktPos(rStream.Tell());
85 
86 	if(nMode == STREAM_READ)
87 	{
88 		sal_uInt32 nReadAnz(nAktPos - nSubRecPos);
89 		if(nReadAnz != nSubRecSiz)
90 		{
91 			rStream.Seek(nSubRecPos + nSubRecSiz);
92 		}
93 	}
94 	else if(nMode == STREAM_WRITE)
95 	{
96 		nSubRecSiz = nAktPos - nSubRecPos;
97 		rStream.Seek(nSubRecPos);
98 		Write();
99 		rStream.Seek(nAktPos);
100 	}
101 
102 	bOpen = sal_False;
103 }
104 
105 /*************************************************************************
106 |*
107 |* Konstruktor, schreibt bzw. liest Versionsnummer
108 |*
109 \************************************************************************/
110 
111 SdIOCompat::SdIOCompat(SvStream& rNewStream, sal_uInt16 nNewMode, sal_uInt16 nVer)
112 :	old_SdrDownCompat(rNewStream, nNewMode), nVersion(nVer)
113 {
114 	if (nNewMode == STREAM_WRITE)
115 	{
116 		DBG_ASSERT(nVer != SDIOCOMPAT_VERSIONDONTKNOW,
117 				   "kann unbekannte Version nicht schreiben");
118 		rNewStream << nVersion;
119 	}
120 	else if (nNewMode == STREAM_READ)
121 	{
122 		DBG_ASSERT(nVer == SDIOCOMPAT_VERSIONDONTKNOW,
123 				   "Lesen mit Angabe der Version ist Quatsch!");
124 		rNewStream >> nVersion;
125 	}
126 }
127 
128 SdIOCompat::~SdIOCompat()
129 {
130 }
131 
132 // eof
133