[Libreoffice-commits] .: 2 commits - binfilter/bf_starmath binfilter/bf_svtools binfilter/bf_svx binfilter/bf_sw binfilter/inc

Michael Stahl mst at kemper.freedesktop.org
Wed Apr 18 08:54:44 PDT 2012


 binfilter/bf_starmath/source/starmath_register.cxx    |    2 
 binfilter/bf_svtools/source/filter.vcl/wmf/winmtf.hxx |    1 
 binfilter/bf_svtools/source/items/svt_macitem.cxx     |    1 
 binfilter/bf_svtools/source/memtools/makefile.mk      |    1 
 binfilter/bf_svtools/source/memtools/tl_contnr.cxx    |   81 ++++
 binfilter/bf_svtools/source/memtools/tl_table.cxx     |  363 ++++++++++++++++++
 binfilter/bf_svtools/source/misc/svt_imap.cxx         |    1 
 binfilter/bf_svtools/source/misc/svt_urihelper.cxx    |    1 
 binfilter/bf_svtools/source/misc1/svt_inettype.cxx    |    2 
 binfilter/bf_svtools/source/uno/svt_unoevent.cxx      |    1 
 binfilter/bf_svtools/source/uno/svt_unoimap.cxx       |    1 
 binfilter/bf_svx/source/editeng/editdoc.hxx           |    1 
 binfilter/bf_sw/source/core/text/inftxt.hxx           |    2 
 binfilter/inc/bf_sc/chgtrack.hxx                      |    2 
 binfilter/inc/bf_sch/schopt.hxx                       |    2 
 binfilter/inc/bf_sfx2/objsh.hxx                       |    2 
 binfilter/inc/bf_svtools/macitem.hxx                  |    2 
 binfilter/inc/bf_svtools/zforlist.hxx                 |    2 
 binfilter/inc/bf_svx/forbiddencharacterstable.hxx     |    2 
 binfilter/inc/bf_svx/svdmodel.hxx                     |    2 
 binfilter/inc/bf_svx/xtable.hxx                       |    1 
 binfilter/inc/bf_sw/hints.hxx                         |    2 
 binfilter/inc/bf_tools/contnr.hxx                     |    9 
 binfilter/inc/bf_tools/table.hxx                      |  153 +++++++
 24 files changed, 617 insertions(+), 20 deletions(-)

New commits:
commit 319d686449ecf259763137d98e7ac2ce16701a28
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Apr 18 16:23:24 2012 +0200

    move tools/table.hxx to binfilter

diff --git a/binfilter/bf_starmath/source/starmath_register.cxx b/binfilter/bf_starmath/source/starmath_register.cxx
index d2461ed..1f32129 100644
--- a/binfilter/bf_starmath/source/starmath_register.cxx
+++ b/binfilter/bf_starmath/source/starmath_register.cxx
@@ -35,8 +35,6 @@
 
 #include <cppuhelper/factory.hxx>
 
-#include <tools/table.hxx>
-
 namespace binfilter {
 
 using namespace ::rtl;
diff --git a/binfilter/bf_svtools/source/filter.vcl/wmf/winmtf.hxx b/binfilter/bf_svtools/source/filter.vcl/wmf/winmtf.hxx
index 92e47a0..f109375 100644
--- a/binfilter/bf_svtools/source/filter.vcl/wmf/winmtf.hxx
+++ b/binfilter/bf_svtools/source/filter.vcl/wmf/winmtf.hxx
@@ -40,7 +40,6 @@
 #include <sot/object.hxx>
 #include <boost/shared_ptr.hpp>
 #include <tools/debug.hxx>
-#include <tools/table.hxx>
 #include <vcl/graph.hxx>
 #include <vcl/virdev.hxx>
 #include <tools/poly.hxx>
diff --git a/binfilter/bf_svtools/source/items/svt_macitem.cxx b/binfilter/bf_svtools/source/items/svt_macitem.cxx
index 3b2a7f6..8244278 100644
--- a/binfilter/bf_svtools/source/items/svt_macitem.cxx
+++ b/binfilter/bf_svtools/source/items/svt_macitem.cxx
@@ -27,7 +27,6 @@
  ************************************************************************/
 
 #include <tools/stream.hxx>
-#include <tools/table.hxx>
 
 #include <bf_svtools/macitem.hxx>
 
diff --git a/binfilter/bf_svtools/source/memtools/makefile.mk b/binfilter/bf_svtools/source/memtools/makefile.mk
index 24aaa10..112b16b 100644
--- a/binfilter/bf_svtools/source/memtools/makefile.mk
+++ b/binfilter/bf_svtools/source/memtools/makefile.mk
@@ -40,6 +40,7 @@ INC+= -I$(PRJ)$/inc$/bf_svtools
 SLOFILES=\
     $(SLO)$/svt_svarray.obj \
     $(SLO)$/tl_contnr.obj \
+    $(SLO)$/tl_table.obj \
     $(SLO)$/tl_unqidx.obj
 
 # --- Targets -------------------------------------------------------
diff --git a/binfilter/bf_svtools/source/memtools/tl_table.cxx b/binfilter/bf_svtools/source/memtools/tl_table.cxx
new file mode 100644
index 0000000..2b9d27f
--- /dev/null
+++ b/binfilter/bf_svtools/source/memtools/tl_table.cxx
@@ -0,0 +1,363 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#define _TOOLS_TABLE_CXX
+
+// -----------------------------------------------------------------------
+#include <tools/debug.hxx>
+#include <bf_tools/impcont.hxx>
+#include <bf_tools/table.hxx>
+
+namespace binfilter
+{
+
+// =======================================================================
+
+sal_uIntPtr Table::ImplGetIndex( sal_uIntPtr nKey, sal_uIntPtr* pIndex ) const
+{
+    // Abpruefen, ob der erste Key groesser als der Vergleichskey ist
+    if ( !nCount || (nKey < (sal_uIntPtr)Container::ImpGetObject(0)) )
+        return TABLE_ENTRY_NOTFOUND;
+
+    sal_uIntPtr nLow;
+    sal_uIntPtr nHigh;
+    sal_uIntPtr nMid;
+    sal_uIntPtr nCompareKey;
+    void**  pNodes = Container::ImpGetOnlyNodes();
+
+    // Binaeres Suchen
+    nLow  = 0;
+    nHigh = nCount-1;
+    if ( pNodes )
+    {
+        do
+        {
+            nMid = (nLow + nHigh) / 2;
+            nCompareKey = (sal_uIntPtr)pNodes[nMid*2];
+            if ( nKey < nCompareKey )
+                nHigh = nMid-1;
+            else
+            {
+                if ( nKey > nCompareKey )
+                    nLow = nMid + 1;
+                else
+                    return nMid*2;
+            }
+        }
+        while ( nLow <= nHigh );
+    }
+    else
+    {
+        do
+        {
+            nMid = (nLow + nHigh) / 2;
+            nCompareKey = (sal_uIntPtr)Container::ImpGetObject( nMid*2 );
+            if ( nKey < nCompareKey )
+                nHigh = nMid-1;
+            else
+            {
+                if ( nKey > nCompareKey )
+                    nLow = nMid + 1;
+                else
+                    return nMid*2;
+            }
+        }
+        while ( nLow <= nHigh );
+    }
+
+    if ( pIndex )
+    {
+        if ( nKey > nCompareKey )
+            *pIndex = (nMid+1)*2;
+        else
+            *pIndex = nMid*2;
+    }
+
+    return TABLE_ENTRY_NOTFOUND;
+}
+
+// =======================================================================
+
+Table::Table( sal_uInt16 _nInitSize, sal_uInt16 _nReSize ) :
+           Container( CONTAINER_MAXBLOCKSIZE, _nInitSize*2, _nReSize*2 )
+{
+    DBG_ASSERT( _nInitSize <= 32767, "Table::Table(): InitSize > 32767" );
+    DBG_ASSERT( _nReSize <= 32767, "Table::Table(): ReSize > 32767" );
+    nCount = 0;
+}
+
+// -----------------------------------------------------------------------
+
+sal_Bool Table::Insert( sal_uIntPtr nKey, void* p )
+{
+    // Tabellenelement einsortieren
+    sal_uIntPtr i;
+    if ( nCount )
+    {
+        if ( nCount <= 24 )
+        {
+            sal_uInt16 nTempCount = (sal_uInt16)nCount * 2;
+
+            if( void** pNodes = Container::ImpGetOnlyNodes() )
+            {
+                sal_uInt16 n = 0;
+                sal_uIntPtr  nCompareKey = (sal_uIntPtr)(*pNodes);
+                while ( nKey > nCompareKey )
+                {
+                    n += 2;
+                    pNodes += 2;
+                    if ( n < nTempCount )
+                        nCompareKey = (sal_uIntPtr)(*pNodes);
+                    else
+                    {
+                        nCompareKey = 0;
+                        break;
+                    }
+                }
+
+                // Testen, ob sich der Key schon in der Tabelle befindet
+                if ( nKey == nCompareKey )
+                    return sal_False;
+
+                i = n;
+            }
+            else
+            {
+                i = 0;
+                if ( ImplGetIndex( nKey, &i ) != TABLE_ENTRY_NOTFOUND )
+                    return sal_False;
+            }
+        }
+        else
+        {
+            i = 0;
+            if ( ImplGetIndex( nKey, &i ) != TABLE_ENTRY_NOTFOUND )
+                return sal_False;
+        }
+    }
+    else
+        i = 0;
+
+    // Eintrag einfuegen (Key vor Pointer)
+    Container::Insert( (void*)nKey, i );
+    Container::Insert( p, i+1 );
+
+    // Ein neuer Eintrag
+    nCount++;
+
+    return sal_True;
+}
+
+// -----------------------------------------------------------------------
+
+void* Table::Remove( sal_uIntPtr nKey )
+{
+    // Index besorgen
+    sal_uIntPtr nIndex = ImplGetIndex( nKey );
+
+    // Testen, ob sich der Key in der Tabelle befindet
+    if ( nIndex == TABLE_ENTRY_NOTFOUND )
+        return NULL;
+
+    // Itemanzahl erniedrigen
+    nCount--;
+
+    // Key entfernen
+    Container::Remove( nIndex );
+
+    // Pointer entfernen und zurueckgeben
+    return Container::Remove( nIndex );
+}
+
+// -----------------------------------------------------------------------
+
+void* Table::Replace( sal_uIntPtr nKey, void* p )
+{
+    // Index abfragen
+    sal_uIntPtr nIndex = ImplGetIndex( nKey );
+
+    // Existiert kein Eintrag mit dem Schluessel
+    if ( nIndex == TABLE_ENTRY_NOTFOUND )
+        return NULL;
+    else
+        return Container::Replace( p, nIndex+1 );
+}
+
+// -----------------------------------------------------------------------
+
+void* Table::Get( sal_uIntPtr nKey ) const
+{
+    // Index besorgen
+    sal_uIntPtr nIndex = ImplGetIndex( nKey );
+
+    // Testen, ob sich der Key in der Tabelle befindet
+    if ( nIndex == TABLE_ENTRY_NOTFOUND )
+        return NULL;
+    else
+        return Container::ImpGetObject( nIndex+1 );
+}
+
+// -----------------------------------------------------------------------
+
+void* Table::GetCurObject() const
+{
+    return Container::ImpGetObject( Container::GetCurPos()+1 );
+}
+
+// -----------------------------------------------------------------------
+
+sal_uIntPtr Table::GetKey( const void* p ) const
+{
+    sal_uIntPtr nIndex = 0;
+
+    // Solange noch Eintraege Vorhanden sind
+    while ( nIndex < nCount )
+    {
+        // Stimmt der Pointer ueberein, wird der Key zurueckgegeben
+        if ( p == Container::ImpGetObject( (nIndex*2)+1 ) )
+            return (sal_uIntPtr)Container::ImpGetObject( nIndex*2 );
+
+        nIndex++;
+    }
+
+    return TABLE_ENTRY_NOTFOUND;
+}
+
+// -----------------------------------------------------------------------
+
+sal_Bool Table::IsKeyValid( sal_uIntPtr nKey ) const
+{
+    return (ImplGetIndex( nKey ) != TABLE_ENTRY_NOTFOUND) ? sal_True : sal_False;
+}
+
+// -----------------------------------------------------------------------
+
+sal_uIntPtr Table::SearchKey( sal_uIntPtr nKey, sal_uIntPtr* pPos ) const
+{
+    *pPos = 0;
+    sal_uIntPtr nPos = ImplGetIndex( nKey, pPos );
+    if ( nPos != TABLE_ENTRY_NOTFOUND )
+    {
+        nPos /= 2;
+        *pPos = nPos;
+    }
+    else
+        *pPos /= 2;
+    return nPos;
+}
+
+// -----------------------------------------------------------------------
+
+void* Table::Seek( sal_uIntPtr nKey )
+{
+    // Testen, ob ein Eintrag vorhanden ist
+    if ( nCount )
+    {
+        sal_uIntPtr nIndex = ImplGetIndex( nKey );
+
+        // Ist Key nicht enthalten
+        if ( nIndex == TABLE_ENTRY_NOTFOUND )
+            return NULL;
+        else
+        {
+            // Index setzen
+            Container::Seek( nIndex );
+
+            // Pointer zurueckgeben
+            return Container::ImpGetObject( Container::GetCurPos() + 1 );
+        }
+    }
+    else
+        return NULL;
+}
+
+void* Table::First()
+{
+    // Testen, ob ein Eintrag vorhanden ist
+    if ( nCount )
+    {
+        // Auf ersten Eintag setzen
+        Container::First();
+
+        // Pointer zurueckgeben
+        return Container::ImpGetObject( 1 );
+    }
+    else
+        return NULL;
+}
+
+// -----------------------------------------------------------------------
+
+void* Table::Last()
+{
+    // Testen, ob ein Eintrag vorhanden ist
+    if ( nCount )
+    {
+        // Last auf letzten Eintrag setzen
+        void* p = Container::Last();
+        Container::Prev();
+
+        // Pointer zurueckgeben
+        return p;
+    }
+    else
+        return NULL;
+}
+
+// -----------------------------------------------------------------------
+
+void* Table::Next()
+{
+    // Ueber den Pointer weiterschalten
+    Container::Next();
+
+    // Nachsten Eintag
+    Container::Next();
+
+    // Pointer vom naechsten Key zurueckgeben
+    return Container::ImpGetObject( Container::GetCurPos() + 1 );
+}
+
+// -----------------------------------------------------------------------
+
+void* Table::Prev()
+{
+    // Ueber den Pointer weiterschalten
+    void* p = Container::Prev();
+
+    // Nachsten Eintag
+    Container::Prev();
+
+    // Pointer vom vorherigen Key zurueckgeben
+    return p;
+}
+
+} // namespace binfilter
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/binfilter/bf_svtools/source/misc/svt_imap.cxx b/binfilter/bf_svtools/source/misc/svt_imap.cxx
index 49b76e9..32ea4cb 100644
--- a/binfilter/bf_svtools/source/misc/svt_imap.cxx
+++ b/binfilter/bf_svtools/source/misc/svt_imap.cxx
@@ -26,7 +26,6 @@
  *
  ************************************************************************/
 
-#include <tools/table.hxx>
 #include <string.h>
 #include <math.h>
 #include <tools/urlobj.hxx>
diff --git a/binfilter/bf_svtools/source/misc/svt_urihelper.cxx b/binfilter/bf_svtools/source/misc/svt_urihelper.cxx
index 0ba6f92..0fb3982 100644
--- a/binfilter/bf_svtools/source/misc/svt_urihelper.cxx
+++ b/binfilter/bf_svtools/source/misc/svt_urihelper.cxx
@@ -27,7 +27,6 @@
  ************************************************************************/
 
 #include <tools/urlobj.hxx>
-#include <tools/table.hxx>
 #include <urihelper.hxx>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include "com/sun/star/lang/WrappedTargetRuntimeException.hpp"
diff --git a/binfilter/bf_svtools/source/misc1/svt_inettype.cxx b/binfilter/bf_svtools/source/misc1/svt_inettype.cxx
index a4419af..4f5e865 100644
--- a/binfilter/bf_svtools/source/misc1/svt_inettype.cxx
+++ b/binfilter/bf_svtools/source/misc1/svt_inettype.cxx
@@ -26,7 +26,7 @@
  *
  ************************************************************************/
 
-#include <tools/table.hxx>
+#include <bf_tools/table.hxx>
 #include <tools/wldcrd.hxx>
 
 #include <bf_svtools/inettype.hxx>
diff --git a/binfilter/bf_svtools/source/uno/svt_unoevent.cxx b/binfilter/bf_svtools/source/uno/svt_unoevent.cxx
index 223ef9a..8c0b5d2 100644
--- a/binfilter/bf_svtools/source/uno/svt_unoevent.cxx
+++ b/binfilter/bf_svtools/source/uno/svt_unoevent.cxx
@@ -26,7 +26,6 @@
  *
  ************************************************************************/
 
-#include <tools/table.hxx>
 #include <bf_tools/string.hxx>
 #include <com/sun/star/beans/PropertyValue.hpp>
 #include <rtl/ustrbuf.hxx>
diff --git a/binfilter/bf_svtools/source/uno/svt_unoimap.cxx b/binfilter/bf_svtools/source/uno/svt_unoimap.cxx
index 58d5eb7..5446f01 100644
--- a/binfilter/bf_svtools/source/uno/svt_unoimap.cxx
+++ b/binfilter/bf_svtools/source/uno/svt_unoimap.cxx
@@ -44,7 +44,6 @@
 #include <cppuhelper/weakagg.hxx>
 #include <cppuhelper/implbase3.hxx>
 
-#include <tools/table.hxx>
 #include <list>
 
 #include <rtl/uuid.h>
diff --git a/binfilter/bf_svx/source/editeng/editdoc.hxx b/binfilter/bf_svx/source/editeng/editdoc.hxx
index a4af2c9..f7bb1d1 100644
--- a/binfilter/bf_svx/source/editeng/editdoc.hxx
+++ b/binfilter/bf_svx/source/editeng/editdoc.hxx
@@ -38,7 +38,6 @@
 
 #include <bf_svtools/itempool.hxx>
 
-#include <tools/table.hxx>
 namespace binfilter {
 
 class ImpEditEngine;
diff --git a/binfilter/bf_sw/source/core/text/inftxt.hxx b/binfilter/bf_sw/source/core/text/inftxt.hxx
index b4e8767..6fe228d 100644
--- a/binfilter/bf_sw/source/core/text/inftxt.hxx
+++ b/binfilter/bf_sw/source/core/text/inftxt.hxx
@@ -32,7 +32,7 @@
 
 #include <com/sun/star/linguistic2/XHyphenatedWord.hpp>
 #include <com/sun/star/beans/PropertyValues.hpp>
-#include <tools/table.hxx>
+#include <bf_tools/table.hxx>
 
 #include "swtypes.hxx"
 #include "txttypes.hxx"
diff --git a/binfilter/inc/bf_sc/chgtrack.hxx b/binfilter/inc/bf_sc/chgtrack.hxx
index 6c860b7..ba14f2b 100644
--- a/binfilter/inc/bf_sc/chgtrack.hxx
+++ b/binfilter/inc/bf_sc/chgtrack.hxx
@@ -35,7 +35,7 @@
 
 
 #include <tools/datetime.hxx>
-#include <tools/table.hxx>
+#include <bf_tools/table.hxx>
 #include <tools/mempool.hxx>
 #include <bf_tools/stack.hxx>
 #include <bf_svtools/lstner.hxx>
diff --git a/binfilter/inc/bf_sch/schopt.hxx b/binfilter/inc/bf_sch/schopt.hxx
index 7664774..29296bc 100644
--- a/binfilter/inc/bf_sch/schopt.hxx
+++ b/binfilter/inc/bf_sch/schopt.hxx
@@ -40,7 +40,7 @@
 // header for Color
 #include <tools/color.hxx>
 // header for Table
-#include <tools/table.hxx>
+#include <bf_tools/table.hxx>
 // header for XColorEntry
 #include <bf_svx/xtable.hxx>
 namespace binfilter {
diff --git a/binfilter/inc/bf_sfx2/objsh.hxx b/binfilter/inc/bf_sfx2/objsh.hxx
index 2aacaf0..62e29ea 100644
--- a/binfilter/inc/bf_sfx2/objsh.hxx
+++ b/binfilter/inc/bf_sfx2/objsh.hxx
@@ -46,7 +46,7 @@
 #include <bf_so3/persist.hxx>
 #include <bf_so3/so2defs.hxx>
 #include <bf_so3/svstor.hxx>
-#include <tools/table.hxx>
+#include <bf_tools/table.hxx>
 #include <vcl/timer.hxx>
 #include <vcl/bitmap.hxx>
 
diff --git a/binfilter/inc/bf_svtools/macitem.hxx b/binfilter/inc/bf_svtools/macitem.hxx
index d26ead3..3c90735 100644
--- a/binfilter/inc/bf_svtools/macitem.hxx
+++ b/binfilter/inc/bf_svtools/macitem.hxx
@@ -42,7 +42,7 @@
 
 #include <bf_tools/string.hxx>
 
-#include <tools/table.hxx>
+#include <bf_tools/table.hxx>
 
 class SvStream;
 
diff --git a/binfilter/inc/bf_svtools/zforlist.hxx b/binfilter/inc/bf_svtools/zforlist.hxx
index 5477e63..88ab125 100644
--- a/binfilter/inc/bf_svtools/zforlist.hxx
+++ b/binfilter/inc/bf_svtools/zforlist.hxx
@@ -33,7 +33,7 @@
 #include "bf_svtools/svtdllapi.h"
 
 #include <bf_tools/string.hxx>
-#include <tools/table.hxx>
+#include <bf_tools/table.hxx>
 #include <i18npool/lang.h>
 #include <bf_svtools/svarray.hxx>
 #include <com/sun/star/uno/Reference.hxx>
diff --git a/binfilter/inc/bf_svx/forbiddencharacterstable.hxx b/binfilter/inc/bf_svx/forbiddencharacterstable.hxx
index bb09b52..c07b483 100644
--- a/binfilter/inc/bf_svx/forbiddencharacterstable.hxx
+++ b/binfilter/inc/bf_svx/forbiddencharacterstable.hxx
@@ -31,7 +31,7 @@
 
 #include <bf_svtools/bf_solar.h>
 
-#include <tools/table.hxx>
+#include <bf_tools/table.hxx>
 
 #include <salhelper/simplereferenceobject.hxx>
 
diff --git a/binfilter/inc/bf_svx/svdmodel.hxx b/binfilter/inc/bf_svx/svdmodel.hxx
index 370bb13..60c4a5a 100644
--- a/binfilter/inc/bf_svx/svdmodel.hxx
+++ b/binfilter/inc/bf_svx/svdmodel.hxx
@@ -36,7 +36,7 @@
 #include <bf_so3/svstor.hxx>
 
 #include <tools/link.hxx>
-#include <tools/contnr.hxx>
+#include <bf_tools/contnr.hxx>
 #include <vcl/mapmod.hxx>
 #include <bf_svtools/brdcst.hxx>
 #include <bf_tools/string.hxx>
diff --git a/binfilter/inc/bf_svx/xtable.hxx b/binfilter/inc/bf_svx/xtable.hxx
index aa6f3d0..0d8bf2a 100644
--- a/binfilter/inc/bf_svx/xtable.hxx
+++ b/binfilter/inc/bf_svx/xtable.hxx
@@ -44,7 +44,6 @@
 
 #include <bf_tools/string.hxx>
 
-#include <tools/table.hxx>
 class Color;
 class Bitmap;
 class VirtualDevice;
diff --git a/binfilter/inc/bf_sw/hints.hxx b/binfilter/inc/bf_sw/hints.hxx
index 4e7d8c6..2737491 100644
--- a/binfilter/inc/bf_sw/hints.hxx
+++ b/binfilter/inc/bf_sw/hints.hxx
@@ -30,7 +30,7 @@
 
 #include <bf_svtools/bf_solar.h>
 
-#include <tools/table.hxx>
+#include <bf_tools/table.hxx>
 #include <swatrset.hxx>
 class OutputDevice;
 namespace binfilter {
diff --git a/binfilter/inc/bf_tools/table.hxx b/binfilter/inc/bf_tools/table.hxx
new file mode 100644
index 0000000..e39b334
--- /dev/null
+++ b/binfilter/inc/bf_tools/table.hxx
@@ -0,0 +1,153 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _TOOLS_TABLE_HXX
+#define _TOOLS_TABLE_HXX
+
+#include "tools/toolsdllapi.h"
+#include <tools/solar.h>
+#include <bf_tools/contnr.hxx>
+
+namespace binfilter
+{
+
+// ---------
+// - Table -
+// ---------
+
+#define TABLE_ENTRY_NOTFOUND   CONTAINER_ENTRY_NOTFOUND
+
+class TOOLS_DLLPUBLIC Table : private Container
+{
+private:
+    sal_uIntPtr nCount;
+    TOOLS_DLLPRIVATE sal_uIntPtr    ImplGetIndex( sal_uIntPtr nKey, sal_uIntPtr* pIndex = NULL ) const;
+public:
+            Table( sal_uInt16 nInitSize = 16, sal_uInt16 nReSize = 16 );
+            Table( const Table& rTable ) : Container( rTable )
+                { nCount = rTable.nCount; }
+
+    sal_Bool    Insert( sal_uIntPtr nKey, void* p );
+    void*   Remove( sal_uIntPtr nKey );
+    void*   Replace( sal_uIntPtr nKey, void* p );
+    void*   Get( sal_uIntPtr nKey ) const;
+
+    void    Clear() { Container::Clear(); nCount = 0; }
+    sal_uIntPtr Count() const { return( nCount ); }
+
+    void*   GetCurObject() const;
+    sal_uIntPtr GetCurKey() const { return (sal_uIntPtr)Container::GetCurObject(); }
+    sal_uIntPtr GetKey( const void* p ) const;
+    sal_Bool    IsKeyValid( sal_uIntPtr nKey ) const;
+
+    void*   GetObject( sal_uIntPtr nPos ) const
+                { return Container::GetObject( (nPos*2)+1 ); }
+    sal_uIntPtr GetObjectKey( sal_uIntPtr nPos ) const
+                { return (sal_uIntPtr)Container::GetObject( nPos*2 ); }
+    sal_uIntPtr SearchKey( sal_uIntPtr nKey, sal_uIntPtr* pPos = NULL ) const;
+
+    void*   Seek( sal_uIntPtr nKey );
+    void*   First();
+    void*   Last();
+    void*   Next();
+    void*   Prev();
+
+    Table&  operator =( const Table& rTable );
+
+    sal_Bool    operator ==( const Table& rTable ) const
+                { return Container::operator ==( rTable ); }
+    sal_Bool    operator !=( const Table& rTable ) const
+                { return Container::operator !=( rTable ); }
+};
+
+inline Table& Table::operator =( const Table& r )
+{
+    Container::operator =( r );
+    nCount = r.nCount;
+    return *this;
+}
+
+// -----------------
+// - DECLARE_TABLE -
+// -----------------
+
+#define DECLARE_TABLE( ClassName, Type )                                \
+class ClassName : private Table                                         \
+{                                                                       \
+public:                                                                 \
+                using Table::Clear;                                     \
+                using Table::Count;                                     \
+                using Table::GetCurKey;                                 \
+                using Table::GetObjectKey;                              \
+                using Table::SearchKey;                                 \
+                using Table::IsKeyValid;                                \
+                                                                        \
+                ClassName( sal_uInt16 _nInitSize = 16,                      \
+                           sal_uInt16 _nReSize = 16 ) :                     \
+                    Table( _nInitSize, _nReSize ) {}                    \
+                ClassName( const ClassName& rClassName ) :              \
+                    Table( rClassName ) {}                              \
+                                                                        \
+    sal_Bool        Insert( sal_uIntPtr nKey, Type p )                          \
+                    { return Table::Insert( nKey, (void*)p ); }         \
+    Type        Remove( sal_uIntPtr nKey )                                  \
+                    { return (Type)Table::Remove( nKey ); }             \
+    Type        Replace( sal_uIntPtr nKey, Type p )                         \
+                    { return (Type)Table::Replace( nKey, (void*)p ); }  \
+    Type        Get( sal_uIntPtr nKey ) const                               \
+                    { return (Type)Table::Get( nKey ); }                \
+                                                                        \
+    Type        GetCurObject() const                                    \
+                    { return (Type)Table::GetCurObject(); }             \
+    sal_uIntPtr     GetKey( const Type p ) const                            \
+                    { return Table::GetKey( (const void*)p ); }         \
+                                                                        \
+    Type        GetObject( sal_uIntPtr nPos ) const                         \
+                    { return (Type)Table::GetObject( nPos ); }          \
+                                                                        \
+    Type        Seek( sal_uIntPtr nKey )                                        \
+                    { return (Type)Table::Seek( nKey ); }               \
+    Type        First() { return (Type)Table::First(); }                \
+    Type        Last()  { return (Type)Table::Last(); }                 \
+    Type        Next()  { return (Type)Table::Next(); }                 \
+    Type        Prev()  { return (Type)Table::Prev(); }                 \
+                                                                        \
+    ClassName&  operator =( const ClassName& rClassName )               \
+                    { Table::operator =( rClassName );                  \
+                      return *this; }                                   \
+                                                                        \
+    sal_Bool        operator ==( const ClassName& rTable ) const            \
+                    { return Table::operator ==( rTable ); }            \
+    sal_Bool        operator !=( const ClassName& rTable ) const            \
+                    { return Table::operator !=( rTable ); }            \
+};
+
+} // namespace binfilter
+
+#endif // _TOOLS_TABLE_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 5b339c5537bb2a882621ca31e2fada391b16d217
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Apr 18 16:28:22 2012 +0200

    partially revert 271e19336e594195ac6e40dd01ba62d2592f24e8
    
    Turns out this stuff is used by Table

diff --git a/binfilter/bf_svtools/source/memtools/tl_contnr.cxx b/binfilter/bf_svtools/source/memtools/tl_contnr.cxx
index f0b48a9..e548d00 100644
--- a/binfilter/bf_svtools/source/memtools/tl_contnr.cxx
+++ b/binfilter/bf_svtools/source/memtools/tl_contnr.cxx
@@ -788,6 +788,17 @@ void Container::ImpInsert( void* p, CBlock* pBlock, sal_uInt16 nIndex )
 |*
 *************************************************************************/
 
+void Container::Insert( void* p )
+{
+    ImpInsert( p, pCurBlock, nCurIndex );
+}
+
+/*************************************************************************
+|*
+|*    Container::Insert()
+|*
+*************************************************************************/
+
 void Container::Insert( void* p, sal_uIntPtr nIndex )
 {
     if ( nCount <= nIndex )
@@ -892,6 +903,21 @@ void* Container::ImpRemove( CBlock* pBlock, sal_uInt16 nIndex )
 |*
 *************************************************************************/
 
+void* Container::Remove()
+{
+    // Wenn kein Item vorhanden ist, NULL zurueckgeben
+    if ( !nCount )
+        return NULL;
+    else
+        return ImpRemove( pCurBlock, nCurIndex );
+}
+
+/*************************************************************************
+|*
+|*    Container::Remove()
+|*
+*************************************************************************/
+
 void* Container::Remove( sal_uIntPtr nIndex )
 {
     // Ist Index nicht innerhalb des Containers, dann NULL zurueckgeben
@@ -1107,6 +1133,23 @@ void Container::Clear()
 
 /*************************************************************************
 |*
+|*    Container::GetCurObject()
+|*
+*************************************************************************/
+
+void* Container::GetCurObject() const
+{
+    DBG_CHKTHIS( Container, DbgCheckContainer );
+
+    // NULL, wenn Container leer
+    if ( !nCount )
+        return NULL;
+    else
+        return pCurBlock->GetObject( nCurIndex );
+}
+
+/*************************************************************************
+|*
 |*    Container::GetCurPos()
 |*
 *************************************************************************/
@@ -1163,6 +1206,44 @@ void* Container::GetObject( sal_uIntPtr nIndex ) const
 
 /*************************************************************************
 |*
+|*    Container::GetPos()
+|*
+*************************************************************************/
+
+sal_uIntPtr Container::GetPos( const void* p ) const
+{
+    DBG_CHKTHIS( Container, DbgCheckContainer );
+
+    void**  pNodes;
+    CBlock* pTemp;
+    sal_uIntPtr nTemp;
+    sal_uInt16  nBlockCount;
+    sal_uInt16  i;
+
+    // Block suchen
+    pTemp = pFirstBlock;
+    nTemp = 0;
+    while ( pTemp )
+    {
+        pNodes = pTemp->GetNodes();
+        i = 0;
+        nBlockCount = pTemp->Count();
+        while ( i < nBlockCount )
+        {
+            if ( p == *pNodes )
+                return nTemp+i;
+            pNodes++;
+            i++;
+        }
+        nTemp += nBlockCount;
+        pTemp  = pTemp->GetNextBlock();
+    }
+
+    return CONTAINER_ENTRY_NOTFOUND;
+}
+
+/*************************************************************************
+|*
 |*    Container::Seek()
 |*
 *************************************************************************/
diff --git a/binfilter/inc/bf_tools/contnr.hxx b/binfilter/inc/bf_tools/contnr.hxx
index 99b9bc6..6d7e70f 100644
--- a/binfilter/inc/bf_tools/contnr.hxx
+++ b/binfilter/inc/bf_tools/contnr.hxx
@@ -79,11 +79,17 @@ public:
                 Container( const Container& rContainer );
                 ~Container();
 
+    void        Insert( void* p );
     void        Insert( void* p, sal_uIntPtr nIndex );
 
+    void*       Remove();
     void*       Remove( sal_uIntPtr nIndex );
+    void*       Remove( void* p )
+                    { return Remove( GetPos( p ) ); }
 
     void*       Replace( void* p, sal_uIntPtr nIndex );
+    void*       Replace( void* pNew, void* pOld )
+                    { return Replace( pNew, GetPos( pOld ) ); }
 
     void        SetSize( sal_uIntPtr nNewSize );
     sal_uIntPtr       GetSize() const { return nCount; }
@@ -91,10 +97,13 @@ public:
     sal_uIntPtr       Count() const { return nCount; }
     void        Clear();
 
+    void*       GetCurObject() const;
     sal_uIntPtr       GetCurPos() const;
     void*       GetObject( sal_uIntPtr nIndex ) const;
+    sal_uIntPtr       GetPos( const void* p ) const;
 
     void*       Seek( sal_uIntPtr nIndex );
+    void*       Seek( void* p ) { return Seek( GetPos( p ) ); }
 
     void*       First();
     void*       Last();


More information about the Libreoffice-commits mailing list