1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #include "oox/xls/sharedstringsbuffer.hxx"
29 
30 #include "oox/xls/biffinputstream.hxx"
31 
32 namespace oox {
33 namespace xls {
34 
35 // ============================================================================
36 
37 using namespace ::com::sun::star::text;
38 using namespace ::com::sun::star::uno;
39 
40 // ============================================================================
41 
42 SharedStringsBuffer::SharedStringsBuffer( const WorkbookHelper& rHelper ) :
43      WorkbookHelper( rHelper )
44 {
45 }
46 
47 RichStringRef SharedStringsBuffer::createRichString()
48 {
49     RichStringRef xString( new RichString( *this ) );
50     maStrings.push_back( xString );
51     return xString;
52 }
53 
54 void SharedStringsBuffer::importSst( BiffInputStream& rStrm )
55 {
56     rStrm.skip( 4 );
57     sal_Int32 nStringCount = rStrm.readInt32();
58     if( nStringCount > 0 )
59     {
60         maStrings.clear();
61         maStrings.reserve( static_cast< size_t >( nStringCount ) );
62         for( ; !rStrm.isEof() && (nStringCount > 0); --nStringCount )
63         {
64             RichStringRef xString( new RichString( *this ) );
65             maStrings.push_back( xString );
66             xString->importUniString( rStrm );
67         }
68     }
69 }
70 
71 void SharedStringsBuffer::finalizeImport()
72 {
73     maStrings.forEachMem( &RichString::finalizeImport );
74 }
75 
76 RichStringRef SharedStringsBuffer::getString( sal_Int32 nStringId ) const
77 {
78     return maStrings.get( nStringId );
79 }
80 
81 // ============================================================================
82 
83 } // namespace xls
84 } // namespace oox
85