1*40df464eSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*40df464eSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*40df464eSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*40df464eSAndrew Rist * distributed with this work for additional information
6*40df464eSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*40df464eSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*40df464eSAndrew Rist * "License"); you may not use this file except in compliance
9*40df464eSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*40df464eSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*40df464eSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*40df464eSAndrew Rist * software distributed under the License is distributed on an
15*40df464eSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*40df464eSAndrew Rist * KIND, either express or implied. See the License for the
17*40df464eSAndrew Rist * specific language governing permissions and limitations
18*40df464eSAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*40df464eSAndrew Rist *************************************************************/
21*40df464eSAndrew Rist
22*40df464eSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svl.hxx"
26cdf0e10cSrcweir #ifndef GCC
27cdf0e10cSrcweir #endif
28cdf0e10cSrcweir #include <tools/debug.hxx>
29cdf0e10cSrcweir
30cdf0e10cSrcweir #include "numhead.hxx"
31cdf0e10cSrcweir
32cdf0e10cSrcweir // ID's fuer Dateien:
33cdf0e10cSrcweir #define SV_NUMID_SIZES 0x4200
34cdf0e10cSrcweir
35cdf0e10cSrcweir // STATIC DATA -----------------------------------------------------------
36cdf0e10cSrcweir
37cdf0e10cSrcweir //SEG_EOFGLOBALS()
38cdf0e10cSrcweir
39cdf0e10cSrcweir // =======================================================================
40cdf0e10cSrcweir /* wird fuer SvNumberformatter nicht gebraucht
41cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_01)
42cdf0e10cSrcweir
43cdf0e10cSrcweir SvNumReadHeader::SvNumReadHeader(SvStream& rNewStream) :
44cdf0e10cSrcweir rStream( rNewStream )
45cdf0e10cSrcweir {
46cdf0e10cSrcweir sal_uLong nDataSize;
47cdf0e10cSrcweir rStream >> nDataSize;
48cdf0e10cSrcweir nDataEnd = rStream.Tell() + nDataSize;
49cdf0e10cSrcweir }
50cdf0e10cSrcweir
51cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_02)
52cdf0e10cSrcweir
53cdf0e10cSrcweir SvNumReadHeader::~SvNumReadHeader()
54cdf0e10cSrcweir {
55cdf0e10cSrcweir sal_uLong nReadEnd = rStream.Tell();
56cdf0e10cSrcweir DBG_ASSERT( nReadEnd <= nDataEnd, "zuviele Bytes gelesen" );
57cdf0e10cSrcweir if ( nReadEnd != nDataEnd )
58cdf0e10cSrcweir rStream.Seek(nDataEnd); // Rest ueberspringen
59cdf0e10cSrcweir }
60cdf0e10cSrcweir
61cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_03)
62cdf0e10cSrcweir
63cdf0e10cSrcweir sal_uLong SvNumReadHeader::BytesLeft() const
64cdf0e10cSrcweir {
65cdf0e10cSrcweir sal_uLong nReadEnd = rStream.Tell();
66cdf0e10cSrcweir if (nReadEnd <= nDataEnd)
67cdf0e10cSrcweir return nDataEnd-nReadEnd;
68cdf0e10cSrcweir
69cdf0e10cSrcweir DBG_ERROR("Fehler bei SvNumReadHeader::BytesLeft");
70cdf0e10cSrcweir return 0;
71cdf0e10cSrcweir }
72cdf0e10cSrcweir
73cdf0e10cSrcweir // -----------------------------------------------------------------------
74cdf0e10cSrcweir
75cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_04)
76cdf0e10cSrcweir
77cdf0e10cSrcweir SvNumWriteHeader::SvNumWriteHeader(SvStream& rNewStream, sal_uLong nDefault) :
78cdf0e10cSrcweir rStream( rNewStream )
79cdf0e10cSrcweir {
80cdf0e10cSrcweir nDataSize = nDefault;
81cdf0e10cSrcweir rStream << nDataSize;
82cdf0e10cSrcweir nDataPos = rStream.Tell();
83cdf0e10cSrcweir }
84cdf0e10cSrcweir
85cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_05)
86cdf0e10cSrcweir
87cdf0e10cSrcweir SvNumWriteHeader::~SvNumWriteHeader()
88cdf0e10cSrcweir {
89cdf0e10cSrcweir sal_uLong nPos = rStream.Tell();
90cdf0e10cSrcweir
91cdf0e10cSrcweir if ( nPos - nDataPos != nDataSize ) // Default getroffen?
92cdf0e10cSrcweir {
93cdf0e10cSrcweir nDataSize = nPos - nDataPos;
94cdf0e10cSrcweir rStream.Seek(nDataPos - sizeof(sal_uInt32));
95cdf0e10cSrcweir rStream << nDataSize; // Groesse am Anfang eintragen
96cdf0e10cSrcweir rStream.Seek(nPos);
97cdf0e10cSrcweir }
98cdf0e10cSrcweir }
99cdf0e10cSrcweir */
100cdf0e10cSrcweir
101cdf0e10cSrcweir // =======================================================================
102cdf0e10cSrcweir
103cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_06)
104cdf0e10cSrcweir
105cdf0e10cSrcweir //! mit Skip() synchron
ImpSvNumMultipleReadHeader(SvStream & rNewStream)106cdf0e10cSrcweir ImpSvNumMultipleReadHeader::ImpSvNumMultipleReadHeader(SvStream& rNewStream) :
107cdf0e10cSrcweir rStream( rNewStream )
108cdf0e10cSrcweir {
109cdf0e10cSrcweir sal_uInt32 nDataSize;
110cdf0e10cSrcweir rStream >> nDataSize;
111cdf0e10cSrcweir sal_uLong nDataPos = rStream.Tell();
112cdf0e10cSrcweir nEntryEnd = nDataPos;
113cdf0e10cSrcweir
114cdf0e10cSrcweir rStream.SeekRel(nDataSize);
115cdf0e10cSrcweir sal_uInt16 nID;
116cdf0e10cSrcweir rStream >> nID;
117cdf0e10cSrcweir if (nID != SV_NUMID_SIZES)
118cdf0e10cSrcweir {
119cdf0e10cSrcweir DBG_ERROR("SV_NUMID_SIZES nicht gefunden");
120cdf0e10cSrcweir }
121cdf0e10cSrcweir sal_uInt32 nSizeTableLen;
122cdf0e10cSrcweir rStream >> nSizeTableLen;
123cdf0e10cSrcweir pBuf = new char[nSizeTableLen];
124cdf0e10cSrcweir rStream.Read( pBuf, nSizeTableLen );
125cdf0e10cSrcweir pMemStream = new SvMemoryStream( pBuf, nSizeTableLen, STREAM_READ );
126cdf0e10cSrcweir
127cdf0e10cSrcweir nEndPos = rStream.Tell();
128cdf0e10cSrcweir rStream.Seek( nDataPos );
129cdf0e10cSrcweir }
130cdf0e10cSrcweir
131cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_07)
132cdf0e10cSrcweir
~ImpSvNumMultipleReadHeader()133cdf0e10cSrcweir ImpSvNumMultipleReadHeader::~ImpSvNumMultipleReadHeader()
134cdf0e10cSrcweir {
135cdf0e10cSrcweir DBG_ASSERT( pMemStream->Tell() == pMemStream->GetEndOfData(),
136cdf0e10cSrcweir "Sizes nicht vollstaendig gelesen" );
137cdf0e10cSrcweir delete pMemStream;
138cdf0e10cSrcweir delete [] pBuf;
139cdf0e10cSrcweir
140cdf0e10cSrcweir rStream.Seek(nEndPos);
141cdf0e10cSrcweir }
142cdf0e10cSrcweir
143cdf0e10cSrcweir //! mit ctor synchron
144cdf0e10cSrcweir // static
Skip(SvStream & rStream)145cdf0e10cSrcweir void ImpSvNumMultipleReadHeader::Skip( SvStream& rStream )
146cdf0e10cSrcweir {
147cdf0e10cSrcweir sal_uInt32 nDataSize;
148cdf0e10cSrcweir rStream >> nDataSize;
149cdf0e10cSrcweir rStream.SeekRel( nDataSize );
150cdf0e10cSrcweir sal_uInt16 nID;
151cdf0e10cSrcweir rStream >> nID;
152cdf0e10cSrcweir if ( nID != SV_NUMID_SIZES )
153cdf0e10cSrcweir {
154cdf0e10cSrcweir DBG_ERROR("SV_NUMID_SIZES nicht gefunden");
155cdf0e10cSrcweir }
156cdf0e10cSrcweir sal_uInt32 nSizeTableLen;
157cdf0e10cSrcweir rStream >> nSizeTableLen;
158cdf0e10cSrcweir rStream.SeekRel( nSizeTableLen );
159cdf0e10cSrcweir }
160cdf0e10cSrcweir
161cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_08)
162cdf0e10cSrcweir
EndEntry()163cdf0e10cSrcweir void ImpSvNumMultipleReadHeader::EndEntry()
164cdf0e10cSrcweir {
165cdf0e10cSrcweir sal_uLong nPos = rStream.Tell();
166cdf0e10cSrcweir DBG_ASSERT( nPos <= nEntryEnd, "zuviel gelesen" );
167cdf0e10cSrcweir if ( nPos != nEntryEnd )
168cdf0e10cSrcweir rStream.Seek( nEntryEnd ); // Rest ueberspringen
169cdf0e10cSrcweir }
170cdf0e10cSrcweir
171cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_0d)
172cdf0e10cSrcweir
StartEntry()173cdf0e10cSrcweir void ImpSvNumMultipleReadHeader::StartEntry()
174cdf0e10cSrcweir {
175cdf0e10cSrcweir sal_uLong nPos = rStream.Tell();
176cdf0e10cSrcweir sal_uInt32 nEntrySize;
177cdf0e10cSrcweir (*pMemStream) >> nEntrySize;
178cdf0e10cSrcweir
179cdf0e10cSrcweir nEntryEnd = nPos + nEntrySize;
180cdf0e10cSrcweir }
181cdf0e10cSrcweir
182cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_09)
183cdf0e10cSrcweir
BytesLeft() const184cdf0e10cSrcweir sal_uLong ImpSvNumMultipleReadHeader::BytesLeft() const
185cdf0e10cSrcweir {
186cdf0e10cSrcweir sal_uLong nReadEnd = rStream.Tell();
187cdf0e10cSrcweir if (nReadEnd <= nEntryEnd)
188cdf0e10cSrcweir return nEntryEnd-nReadEnd;
189cdf0e10cSrcweir
190cdf0e10cSrcweir DBG_ERROR("Fehler bei ImpSvNumMultipleReadHeader::BytesLeft");
191cdf0e10cSrcweir return 0;
192cdf0e10cSrcweir }
193cdf0e10cSrcweir
194cdf0e10cSrcweir // -----------------------------------------------------------------------
195cdf0e10cSrcweir
196cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_0a)
197cdf0e10cSrcweir
ImpSvNumMultipleWriteHeader(SvStream & rNewStream,sal_uLong nDefault)198cdf0e10cSrcweir ImpSvNumMultipleWriteHeader::ImpSvNumMultipleWriteHeader(SvStream& rNewStream,
199cdf0e10cSrcweir sal_uLong nDefault) :
200cdf0e10cSrcweir rStream( rNewStream ),
201cdf0e10cSrcweir aMemStream( 4096, 4096 )
202cdf0e10cSrcweir {
203cdf0e10cSrcweir nDataSize = nDefault;
204cdf0e10cSrcweir rStream << nDataSize;
205cdf0e10cSrcweir
206cdf0e10cSrcweir nDataPos = rStream.Tell();
207cdf0e10cSrcweir nEntryStart = nDataPos;
208cdf0e10cSrcweir }
209cdf0e10cSrcweir
210cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_0b)
211cdf0e10cSrcweir
~ImpSvNumMultipleWriteHeader()212cdf0e10cSrcweir ImpSvNumMultipleWriteHeader::~ImpSvNumMultipleWriteHeader()
213cdf0e10cSrcweir {
214cdf0e10cSrcweir sal_uLong nDataEnd = rStream.Tell();
215cdf0e10cSrcweir
216cdf0e10cSrcweir rStream << (sal_uInt16) SV_NUMID_SIZES;
217cdf0e10cSrcweir rStream << static_cast<sal_uInt32>(aMemStream.Tell());
218cdf0e10cSrcweir rStream.Write( aMemStream.GetData(), aMemStream.Tell() );
219cdf0e10cSrcweir
220cdf0e10cSrcweir if ( nDataEnd - nDataPos != nDataSize ) // Default getroffen?
221cdf0e10cSrcweir {
222cdf0e10cSrcweir nDataSize = nDataEnd - nDataPos;
223cdf0e10cSrcweir sal_uLong nPos = rStream.Tell();
224cdf0e10cSrcweir rStream.Seek(nDataPos-sizeof(sal_uInt32));
225cdf0e10cSrcweir rStream << nDataSize; // Groesse am Anfang eintragen
226cdf0e10cSrcweir rStream.Seek(nPos);
227cdf0e10cSrcweir }
228cdf0e10cSrcweir }
229cdf0e10cSrcweir
230cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_0c)
231cdf0e10cSrcweir
EndEntry()232cdf0e10cSrcweir void ImpSvNumMultipleWriteHeader::EndEntry()
233cdf0e10cSrcweir {
234cdf0e10cSrcweir sal_uLong nPos = rStream.Tell();
235cdf0e10cSrcweir aMemStream << static_cast<sal_uInt32>(nPos - nEntryStart);
236cdf0e10cSrcweir }
237cdf0e10cSrcweir
238cdf0e10cSrcweir //#pragma SEG_FUNCDEF(numhead_0e)
239cdf0e10cSrcweir
StartEntry()240cdf0e10cSrcweir void ImpSvNumMultipleWriteHeader::StartEntry()
241cdf0e10cSrcweir {
242cdf0e10cSrcweir sal_uLong nPos = rStream.Tell();
243cdf0e10cSrcweir nEntryStart = nPos;
244cdf0e10cSrcweir }
245cdf0e10cSrcweir
246