merge the formfield patch from ooo-build
[ooovba.git] / writerfilter / source / doctok / WW8BinTableImpl.cxx
blobc2c6e99942f7208a6ea4745b051ee79273f94cb1
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: WW8BinTableImpl.cxx,v $
10 * $Revision: 1.5 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #include "WW8BinTableImpl.hxx"
33 namespace writerfilter {
34 namespace doctok
36 using namespace ::std;
38 void PageNumber::dump(OutputWithDepth<string> & /*output*/) const
42 sal_uInt32 WW8BinTableImpl::getPageNumber(const Fc & rFc) const
44 sal_uInt32 nResult = 0;
46 if (mPageMap.find(rFc) == mPageMap.end())
48 #if 0
49 sal_uInt32 n = getEntryCount();
51 while (rFc < getFc(n))
53 --n;
56 nResult = getPageNumber(n);
57 mPageMap[rFc] = nResult;
58 #else
59 sal_uInt32 left = 0;
60 sal_uInt32 right = getEntryCount();
62 while (right - left > 1)
64 sal_uInt32 middle = (right + left) / 2;
66 Fc aFc = getFc(middle);
68 if (rFc < aFc)
69 right = middle;
70 else
71 left = middle;
75 nResult = getPageNumber(left);
76 mPageMap[rFc] = nResult;
77 #endif
80 else
81 nResult = mPageMap[rFc];
83 return nResult;
86 string WW8BinTableImpl::toString() const
88 string aResult;
89 char sBuffer[255];
91 aResult += "(";
93 for (sal_uInt32 n = 0; n < getEntryCount(); n++)
95 if (n > 0)
96 aResult += ", ";
98 snprintf(sBuffer, 255, "%" SAL_PRIxUINT32, getFc(n).get());
99 aResult += sBuffer;
100 aResult += "->";
101 snprintf(sBuffer, 255, "%" SAL_PRIxUINT32, getPageNumber(n));
102 aResult += sBuffer;
105 aResult += ")";
107 return aResult;