[Libreoffice-commits] core.git: svl/inc svl/source

Thomas Arnhold thomas at arnhold.org
Tue Mar 12 02:49:33 PDT 2013


 svl/inc/svl/rngitem.hxx          |   50 +++++----
 svl/source/items/rngitem.cxx     |  190 ++--------------------------------
 svl/source/items/rngitem_inc.cxx |  212 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 255 insertions(+), 197 deletions(-)

New commits:
commit df8c41cceeca27ae49e9fa6b5cd64c65c8feb218
Author: Thomas Arnhold <thomas at arnhold.org>
Date:   Tue Mar 12 10:48:35 2013 +0100

    Revert "reduce some uglyness"
    
    MSVC doesn't like this.
    
    This reverts commit 84dc8e5b5504e5f54fba695d4338d022681d85cf.

diff --git a/svl/inc/svl/rngitem.hxx b/svl/inc/svl/rngitem.hxx
index cf23e9c..698641d 100644
--- a/svl/inc/svl/rngitem.hxx
+++ b/svl/inc/svl/rngitem.hxx
@@ -19,6 +19,19 @@
 
 #ifndef _SFXRNGITEM_HXX
 
+#ifndef NUMTYPE
+
+#define NUMTYPE sal_uInt16
+#define SfxXRangeItem SfxRangeItem
+#define SfxXRangesItem SfxUShortRangesItem
+#include <svl/rngitem.hxx>
+#undef NUMTYPE
+#undef SfxXRangeItem
+#undef SfxXRangesItem
+
+#define _SFXRNGITEM_HXX
+
+#else
 #include "svl/svldllapi.h"
 #include <svl/poolitem.hxx>
 
@@ -26,16 +39,16 @@ class SvStream;
 
 // -----------------------------------------------------------------------
 
-class SVL_DLLPUBLIC SfxRangeItem : public SfxPoolItem
+class SVL_DLLPUBLIC SfxXRangeItem : public SfxPoolItem
 {
 private:
-    sal_uInt16                  nFrom;
-    sal_uInt16                  nTo;
+    NUMTYPE                     nFrom;
+    NUMTYPE                     nTo;
 public:
                                 TYPEINFO();
-                                SfxRangeItem();
-                                SfxRangeItem( sal_uInt16 nWID, sal_uInt16 nFrom, sal_uInt16 nTo );
-                                SfxRangeItem( const SfxRangeItem& rItem );
+                                SfxXRangeItem();
+                                SfxXRangeItem( sal_uInt16 nWID, NUMTYPE nFrom, NUMTYPE nTo );
+                                SfxXRangeItem( const SfxXRangeItem& rItem );
     virtual int                 operator==( const SfxPoolItem& ) const;
     virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres,
                                     SfxMapUnit eCoreMetric,
@@ -43,28 +56,28 @@ public:
                                     OUString &rText,
                                     const IntlWrapper * = 0 ) const;
     virtual SfxPoolItem*        Clone( SfxItemPool *pPool = 0 ) const;
-    inline sal_uInt16&          From() { return nFrom; }
-    inline sal_uInt16           From() const { return nFrom; }
-    inline sal_uInt16&          To() { return nTo; }
-    inline sal_uInt16           To() const { return nTo; }
-    inline sal_Bool             HasRange() const { return nTo>nFrom; }
+    inline NUMTYPE&             From() { return nFrom; }
+    inline NUMTYPE              From() const { return nFrom; }
+    inline NUMTYPE&             To() { return nTo; }
+    inline NUMTYPE              To() const { return nTo; }
+    inline sal_Bool                 HasRange() const { return nTo>nFrom; }
     virtual SfxPoolItem*        Create( SvStream &, sal_uInt16 nVersion ) const;
     virtual SvStream&           Store( SvStream &, sal_uInt16 nItemVersion ) const;
 };
 
 // -----------------------------------------------------------------------
 
-class SVL_DLLPUBLIC SfxUShortRangesItem : public SfxPoolItem
+class SVL_DLLPUBLIC SfxXRangesItem : public SfxPoolItem
 {
 private:
-    sal_uInt16*                 _pRanges;
+    NUMTYPE*                    _pRanges;
 
 public:
                                 TYPEINFO();
-                                SfxUShortRangesItem();
-                                SfxUShortRangesItem( sal_uInt16 nWID, SvStream &rStream );
-                                SfxUShortRangesItem( const SfxUShortRangesItem& rItem );
-    virtual                     ~SfxUShortRangesItem();
+                                SfxXRangesItem();
+                                SfxXRangesItem( sal_uInt16 nWID, SvStream &rStream );
+                                SfxXRangesItem( const SfxXRangesItem& rItem );
+    virtual                     ~SfxXRangesItem();
     virtual int                 operator==( const SfxPoolItem& ) const;
     virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres,
                                     SfxMapUnit eCoreMetric,
@@ -72,11 +85,12 @@ public:
                                     OUString &rText,
                                     const IntlWrapper * = 0 ) const;
     virtual SfxPoolItem*        Clone( SfxItemPool *pPool = 0 ) const;
-    inline const sal_uInt16*    GetRanges() const { return _pRanges; }
+    inline const NUMTYPE*       GetRanges() const { return _pRanges; }
     virtual SfxPoolItem*        Create( SvStream &, sal_uInt16 nVersion ) const;
     virtual SvStream&           Store( SvStream &, sal_uInt16 nItemVersion ) const;
 };
 
 #endif
+#endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svl/source/items/rngitem.cxx b/svl/source/items/rngitem.cxx
index 645c543..72f890d 100644
--- a/svl/source/items/rngitem.cxx
+++ b/svl/source/items/rngitem.cxx
@@ -18,190 +18,22 @@
  */
 
 #include <tools/stream.hxx>
-#include <svl/rngitem.hxx>
-
-static inline sal_uInt16 Count_Impl(const sal_uInt16 * pRanges)
-{
-    sal_uInt16 nCount = 0;
-    for (; *pRanges; pRanges += 2) nCount += 2;
-    return nCount;
-}
-
-// -----------------------------------------------------------------------
-
-TYPEINIT1_AUTOFACTORY(SfxRangeItem, SfxPoolItem);
-TYPEINIT1_AUTOFACTORY(SfxUShortRangesItem, SfxPoolItem);
-
-sal_uInt16 Count_Impl( const sal_uInt16 *pRanges );
-
-// -----------------------------------------------------------------------
-
-SfxRangeItem::SfxRangeItem()
-{
-    nFrom = 0;
-    nTo = 0;
-}
-
-// -----------------------------------------------------------------------
-
-SfxRangeItem::SfxRangeItem( sal_uInt16 which, sal_uInt16 from, sal_uInt16 to ):
-    SfxPoolItem( which ),
-    nFrom( from ),
-    nTo( to )
-{
-}
-
-// -----------------------------------------------------------------------
-
-SfxRangeItem::SfxRangeItem( const SfxRangeItem& rItem ) :
-    SfxPoolItem( rItem )
-{
-    nFrom = rItem.nFrom;
-    nTo = rItem.nTo;
-}
-
-// -----------------------------------------------------------------------
-
-SfxItemPresentation SfxRangeItem::GetPresentation
-(
-    SfxItemPresentation     /*ePresentation*/,
-    SfxMapUnit              /*eCoreMetric*/,
-    SfxMapUnit              /*ePresentationMetric*/,
-    OUString&               rText,
-    const IntlWrapper *
-)   const
-{
-    rText = OUString::number(nFrom) + ":" + OUString::number(nTo);
-    return SFX_ITEM_PRESENTATION_NAMELESS;
-}
-
-// -----------------------------------------------------------------------
-
-int SfxRangeItem::operator==( const SfxPoolItem& rItem ) const
-{
-    DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
-    SfxRangeItem* pT = (SfxRangeItem*)&rItem;
-    if( nFrom==pT->nFrom && nTo==pT->nTo )
-        return 1;
-    return 0;
-}
-
-// -----------------------------------------------------------------------
-
-SfxPoolItem* SfxRangeItem::Clone(SfxItemPool *) const
-{
-    return new SfxRangeItem( Which(), nFrom, nTo );
-}
-
-// -----------------------------------------------------------------------
 
-SfxPoolItem* SfxRangeItem::Create(SvStream &rStream, sal_uInt16) const
-{
-    sal_uInt16 nVon(0), nBis(0);
-    rStream >> nVon;
-    rStream >> nBis;
-    return new SfxRangeItem( Which(), nVon, nBis );
-}
+#ifndef NUMTYPE
 
-// -----------------------------------------------------------------------
-
-SvStream& SfxRangeItem::Store(SvStream &rStream, sal_uInt16) const
-{
-    rStream << nFrom;
-    rStream << nTo;
-    return rStream;
-}
-
-//=========================================================================
-
-SfxUShortRangesItem::SfxUShortRangesItem()
-:   _pRanges(0)
-{
-}
-
-//-------------------------------------------------------------------------
-
-SfxUShortRangesItem::SfxUShortRangesItem( sal_uInt16 nWID, SvStream &rStream )
-:   SfxPoolItem( nWID )
-{
-    sal_uInt16 nCount(0);
-    rStream >> nCount;
-    _pRanges = new sal_uInt16[nCount + 1];
-    for ( sal_uInt16 n = 0; n < nCount; ++n )
-        rStream >> _pRanges[n];
-    _pRanges[nCount] = 0;
-}
-
-//-------------------------------------------------------------------------
-
-SfxUShortRangesItem::SfxUShortRangesItem( const SfxUShortRangesItem& rItem )
-:   SfxPoolItem( rItem )
-{
-    sal_uInt16 nCount = Count_Impl(rItem._pRanges) + 1;
-    _pRanges = new sal_uInt16[nCount];
-    memcpy( _pRanges, rItem._pRanges, sizeof(sal_uInt16) * nCount );
-}
-
-//-------------------------------------------------------------------------
-
-SfxUShortRangesItem::~SfxUShortRangesItem()
-{
-    delete _pRanges;
-}
-
-//-------------------------------------------------------------------------
-
-int SfxUShortRangesItem::operator==( const SfxPoolItem &rItem ) const
-{
-    const SfxUShortRangesItem &rOther = (const SfxUShortRangesItem&) rItem;
-    if ( !_pRanges && !rOther._pRanges )
-        return sal_True;
-    if ( _pRanges || rOther._pRanges )
-        return sal_False;
-
-    sal_uInt16 n;
-    for ( n = 0; _pRanges[n] && rOther._pRanges[n]; ++n )
-        if ( *_pRanges != rOther._pRanges[n] )
-            return 0;
-
-    return !_pRanges[n] && !rOther._pRanges[n];
-}
-
-//-------------------------------------------------------------------------
-
-SfxItemPresentation SfxUShortRangesItem::GetPresentation( SfxItemPresentation /*ePres*/,
-                                    SfxMapUnit /*eCoreMetric*/,
-                                    SfxMapUnit /*ePresMetric*/,
-                                    OUString & /*rText*/,
-                                    const IntlWrapper * ) const
-{
-    // not implemented
-    return SFX_ITEM_PRESENTATION_NONE;
-}
-
-//-------------------------------------------------------------------------
-
-SfxPoolItem* SfxUShortRangesItem::Clone( SfxItemPool * ) const
-{
-    return new SfxUShortRangesItem( *this );
-}
+#define NUMTYPE sal_uInt16
+#define SfxXRangeItem SfxRangeItem
+#define SfxXRangesItem SfxUShortRangesItem
+#include <svl/rngitem.hxx>
+#include "rngitem_inc.cxx"
 
-//-------------------------------------------------------------------------
+#else
 
-SfxPoolItem* SfxUShortRangesItem::Create( SvStream &rStream, sal_uInt16 ) const
-{
-    return new SfxUShortRangesItem( Which(), rStream );
-}
+// We leave this condition just in case NUMTYPE has been defined externally to this
+// file and we are supposed to define the SfxXRangeItem based on that.
 
-//-------------------------------------------------------------------------
+#include "rngitem_inc.cxx"
 
-SvStream& SfxUShortRangesItem::Store( SvStream &rStream, sal_uInt16 ) const
-{
-    sal_uInt16 nCount = Count_Impl( _pRanges );
-    rStream >> nCount;
-    for ( sal_uInt16 n = 0; _pRanges[n]; ++n )
-        rStream >> _pRanges[n];
-    return rStream;
-}
+#endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svl/source/items/rngitem_inc.cxx b/svl/source/items/rngitem_inc.cxx
new file mode 100644
index 0000000..572c89e
--- /dev/null
+++ b/svl/source/items/rngitem_inc.cxx
@@ -0,0 +1,212 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+// This snippet of code is included by rngitem.cxx but not compiled directly.
+// Ugly hack, probably due to lack of templates in the 20th century.
+
+static inline NUMTYPE Count_Impl(const NUMTYPE * pRanges)
+{
+    NUMTYPE nCount = 0;
+    for (; *pRanges; pRanges += 2) nCount += 2;
+    return nCount;
+}
+
+// -----------------------------------------------------------------------
+
+TYPEINIT1_AUTOFACTORY(SfxXRangeItem, SfxPoolItem);
+TYPEINIT1_AUTOFACTORY(SfxXRangesItem, SfxPoolItem);
+
+NUMTYPE Count_Impl( const NUMTYPE *pRanges );
+
+// -----------------------------------------------------------------------
+
+SfxXRangeItem::SfxXRangeItem()
+{
+    nFrom = 0;
+    nTo = 0;
+}
+
+// -----------------------------------------------------------------------
+
+SfxXRangeItem::SfxXRangeItem( sal_uInt16 which, NUMTYPE from, NUMTYPE to ):
+    SfxPoolItem( which ),
+    nFrom( from ),
+    nTo( to )
+{
+}
+
+// -----------------------------------------------------------------------
+
+SfxXRangeItem::SfxXRangeItem( const SfxXRangeItem& rItem ) :
+    SfxPoolItem( rItem )
+{
+    nFrom = rItem.nFrom;
+    nTo = rItem.nTo;
+}
+
+// -----------------------------------------------------------------------
+
+SfxItemPresentation SfxXRangeItem::GetPresentation
+(
+    SfxItemPresentation     /*ePresentation*/,
+    SfxMapUnit              /*eCoreMetric*/,
+    SfxMapUnit              /*ePresentationMetric*/,
+    OUString&               rText,
+    const IntlWrapper *
+)   const
+{
+    rText = OUString::number(nFrom) + ":" + OUString::number(nTo);
+    return SFX_ITEM_PRESENTATION_NAMELESS;
+}
+
+// -----------------------------------------------------------------------
+
+int SfxXRangeItem::operator==( const SfxPoolItem& rItem ) const
+{
+    DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
+    SfxXRangeItem* pT = (SfxXRangeItem*)&rItem;
+    if( nFrom==pT->nFrom && nTo==pT->nTo )
+        return 1;
+    return 0;
+}
+
+// -----------------------------------------------------------------------
+
+SfxPoolItem* SfxXRangeItem::Clone(SfxItemPool *) const
+{
+    return new SfxXRangeItem( Which(), nFrom, nTo );
+}
+
+// -----------------------------------------------------------------------
+
+SfxPoolItem* SfxXRangeItem::Create(SvStream &rStream, sal_uInt16) const
+{
+    NUMTYPE nVon(0), nBis(0);
+    rStream >> nVon;
+    rStream >> nBis;
+    return new SfxXRangeItem( Which(), nVon, nBis );
+}
+
+// -----------------------------------------------------------------------
+
+SvStream& SfxXRangeItem::Store(SvStream &rStream, sal_uInt16) const
+{
+    rStream << nFrom;
+    rStream << nTo;
+    return rStream;
+}
+
+//=========================================================================
+
+SfxXRangesItem::SfxXRangesItem()
+:   _pRanges(0)
+{
+}
+
+//-------------------------------------------------------------------------
+
+SfxXRangesItem::SfxXRangesItem( sal_uInt16 nWID, SvStream &rStream )
+:   SfxPoolItem( nWID )
+{
+    NUMTYPE nCount(0);
+    rStream >> nCount;
+    _pRanges = new NUMTYPE[nCount + 1];
+    for ( NUMTYPE n = 0; n < nCount; ++n )
+        rStream >> _pRanges[n];
+    _pRanges[nCount] = 0;
+}
+
+//-------------------------------------------------------------------------
+
+SfxXRangesItem::SfxXRangesItem( const SfxXRangesItem& rItem )
+:   SfxPoolItem( rItem )
+{
+    NUMTYPE nCount = Count_Impl(rItem._pRanges) + 1;
+    _pRanges = new NUMTYPE[nCount];
+    memcpy( _pRanges, rItem._pRanges, sizeof(NUMTYPE) * nCount );
+}
+
+//-------------------------------------------------------------------------
+
+SfxXRangesItem::~SfxXRangesItem()
+{
+    delete _pRanges;
+}
+
+//-------------------------------------------------------------------------
+
+int SfxXRangesItem::operator==( const SfxPoolItem &rItem ) const
+{
+    const SfxXRangesItem &rOther = (const SfxXRangesItem&) rItem;
+    if ( !_pRanges && !rOther._pRanges )
+        return sal_True;
+    if ( _pRanges || rOther._pRanges )
+        return sal_False;
+
+    NUMTYPE n;
+    for ( n = 0; _pRanges[n] && rOther._pRanges[n]; ++n )
+        if ( *_pRanges != rOther._pRanges[n] )
+            return 0;
+
+    return !_pRanges[n] && !rOther._pRanges[n];
+}
+
+//-------------------------------------------------------------------------
+
+SfxItemPresentation SfxXRangesItem::GetPresentation( SfxItemPresentation /*ePres*/,
+                                    SfxMapUnit /*eCoreMetric*/,
+                                    SfxMapUnit /*ePresMetric*/,
+                                    OUString & /*rText*/,
+                                    const IntlWrapper * ) const
+{
+    // not implemented
+    return SFX_ITEM_PRESENTATION_NONE;
+}
+
+//-------------------------------------------------------------------------
+
+SfxPoolItem* SfxXRangesItem::Clone( SfxItemPool * ) const
+{
+    return new SfxXRangesItem( *this );
+}
+
+//-------------------------------------------------------------------------
+
+SfxPoolItem* SfxXRangesItem::Create( SvStream &rStream, sal_uInt16 ) const
+{
+    return new SfxXRangesItem( Which(), rStream );
+}
+
+//-------------------------------------------------------------------------
+
+SvStream& SfxXRangesItem::Store( SvStream &rStream, sal_uInt16 ) const
+{
+    NUMTYPE nCount = Count_Impl( _pRanges );
+    rStream >> nCount;
+    for ( NUMTYPE n = 0; _pRanges[n]; ++n )
+        rStream >> _pRanges[n];
+    return rStream;
+}
+
+
+#undef NUMTYPE
+#undef SfxXRangeItem
+#undef SfxXRangesItem
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list