Hi

Convert tools/table.hxx usage in editeng/source/editeng/editdoc.hxx to boost::ptr_map

Contributed under LGPLv3+ / MPL 1.1 or later.
(And my license statement is on file in the wiki)

Regards, Noel Grandin

Disclaimer: http://www.peralex.com/disclaimer.html


diff --git a/editeng/source/editeng/editattr.hxx 
b/editeng/source/editeng/editattr.hxx
index 8e82084..19632c0 100644
--- a/editeng/source/editeng/editattr.hxx
+++ b/editeng/source/editeng/editattr.hxx
@@ -30,9 +30,9 @@
 #define _EDITATTR_HXX
 
 #include <editeng/eeitem.hxx>
+#include <editeng/fontitem.hxx>
 
 class SvxFont;
-class SvxFontItem;
 class SvxWeightItem;
 class SvxPostureItem;
 class SvxShadowedItem;
diff --git a/editeng/source/editeng/editdoc.cxx 
b/editeng/source/editeng/editdoc.cxx
index 0161eaa0..53e293d 100644
--- a/editeng/source/editeng/editdoc.cxx
+++ b/editeng/source/editeng/editdoc.cxx
@@ -2169,33 +2169,36 @@ bool CharAttribList::DbgCheckAttribs() const
 }
 #endif
 
-SvxFontTable::SvxFontTable()
+sal_uLong SvxFontTable::GetId( const SvxFontItem& rFontItem ) const
 {
+    for(FontItemMap::const_iterator it = maFontItemMap.begin(); it != 
maFontItemMap.end(); ++it)
+    {
+        if ( *it->second == rFontItem )
+            return it->first;
+    }
+    DBG_WARNING( "Font not found: GetId()" );
+    return 0;
 }
 
-SvxFontTable::~SvxFontTable()
+void SvxFontTable::Insert( sal_uLong nIdx, SvxFontItem *pFontItem)
 {
-    SvxFontItem* pItem = First();
-    while( pItem )
-    {
-        delete pItem;
-        pItem = Next();
-    }
+    maFontItemMap.insert( nIdx, pFontItem );
 }
 
-sal_uLong SvxFontTable::GetId( const SvxFontItem& rFontItem )
+int SvxFontTable::Count() const
 {
-    SvxFontItem* pItem = First();
-    while ( pItem )
-    {
-        if ( *pItem == rFontItem )
-            return GetCurKey();
-        pItem = Next();
-    }
-    DBG_WARNING( "Font not found: GetId()" );
-    return 0;
+    return maFontItemMap.size();
 }
 
+SvxFontItem* SvxFontTable::Get( sal_uLong nIdx )
+{
+    FontItemMap::iterator it = maFontItemMap.find( nIdx );
+    if (it == maFontItemMap.end() )
+        return NULL;
+    return it->second;
+}
+
+
 SvxColorList::SvxColorList()
 {
 }
diff --git a/editeng/source/editeng/editdoc.hxx 
b/editeng/source/editeng/editdoc.hxx
index 2b35c3e..6a14fdf 100644
--- a/editeng/source/editeng/editdoc.hxx
+++ b/editeng/source/editeng/editdoc.hxx
@@ -39,8 +39,8 @@
 #include <svl/itempool.hxx>
 #include <tools/table.hxx>
 #include <vector>
-
 #include <deque>
+#include "boost/ptr_container/ptr_map.hpp"
 
 class ImpEditEngine;
 class SvxTabStop;
@@ -141,15 +141,20 @@ SV_DECL_PTRARR( ContentInfoArray, ContentAttribsInfoPtr, 
1 )
 //  ----------------------------------------------------------------------
 //  class SvxFontTable
 //  ----------------------------------------------------------------------
-DECLARE_TABLE( DummyFontTable, SvxFontItem* )
 
-class SvxFontTable : public DummyFontTable
+class SvxFontTable
 {
+private:
+    typedef boost::ptr_map<sal_uLong, SvxFontItem> FontItemMap;
+    FontItemMap maFontItemMap;
 public:
-            SvxFontTable();
-            ~SvxFontTable();
+    SvxFontTable() {}
+    ~SvxFontTable() {}
 
-    sal_uLong   GetId( const SvxFontItem& rFont );
+    sal_uLong    GetId( const SvxFontItem& rFont ) const;
+    void         Insert( sal_uLong nIdx, SvxFontItem *pFontItem );
+    int          Count() const;
+    SvxFontItem* Get( sal_uLong nIdx );
 };
 
 //  ----------------------------------------------------------------------
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to