From df8c41cceeca27ae49e9fa6b5cd64c65c8feb218 Mon Sep 17 00:00:00 2001 From: Thomas Arnhold Date: Tue, 12 Mar 2013 10:48:35 +0100 Subject: Revert "reduce some uglyness" MSVC doesn't like this. This reverts commit 84dc8e5b5504e5f54fba695d4338d022681d85cf. --- 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(-) create mode 100644 svl/source/items/rngitem_inc.cxx diff --git a/svl/inc/svl/rngitem.hxx b/svl/inc/svl/rngitem.hxx index cf23e9c394bf..698641d51fb1 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 +#undef NUMTYPE +#undef SfxXRangeItem +#undef SfxXRangesItem + +#define _SFXRNGITEM_HXX + +#else #include "svl/svldllapi.h" #include @@ -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 645c543230e2..72f890d462aa 100644 --- a/svl/source/items/rngitem.cxx +++ b/svl/source/items/rngitem.cxx @@ -18,190 +18,22 @@ */ #include -#include - -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 +#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 000000000000..572c89ef5fff --- /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: */ -- cgit v1.2.3