LCOV - code coverage report
Current view: top level - libreoffice/solver/unxlngi6.pro/inc/tools - gen.hxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 193 260 74.2 %
Date: 2012-12-27 Functions: 82 105 78.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : #ifndef _SV_GEN_HXX
      20             : #define _SV_GEN_HXX
      21             : 
      22             : #include "tools/toolsdllapi.h"
      23             : #include <tools/solar.h>
      24             : 
      25             : #include <limits.h>
      26             : #include <ostream>
      27             : 
      28             : class SvStream;
      29             : 
      30             : // Pair
      31             : 
      32             : class SAL_WARN_UNUSED Pair
      33             : {
      34             : public:
      35             :                         Pair();
      36             :                         Pair( long nA, long nB );
      37             : 
      38           0 :     long                A() const { return nA; }
      39           0 :     long                B() const { return nB; }
      40             : 
      41        1359 :     long&               A() { return nA; }
      42        1357 :     long&               B() { return nB; }
      43             : 
      44             :     sal_Bool            operator == ( const Pair& rPair ) const;
      45             :     sal_Bool            operator != ( const Pair& rPair ) const;
      46             : 
      47             :     TOOLS_DLLPUBLIC friend SvStream&    operator>>( SvStream& rIStream, Pair& rPair );
      48             :     TOOLS_DLLPUBLIC friend SvStream&    operator<<( SvStream& rOStream, const Pair& rPair );
      49             : 
      50             : protected:
      51             :     long                nA;
      52             :     long                nB;
      53             : };
      54             : 
      55      814030 : inline Pair::Pair()
      56             : {
      57      814030 :     nA = nB = 0;
      58      814030 : }
      59             : 
      60     2831930 : inline Pair::Pair( long _nA, long _nB )
      61             : {
      62     2831930 :     Pair::nA = _nA;
      63     2831930 :     Pair::nB = _nB;
      64     2831930 : }
      65             : 
      66      147299 : inline sal_Bool Pair::operator == ( const Pair& rPair ) const
      67             : {
      68      147299 :     return ((nA == rPair.nA) && (nB == rPair.nB));
      69             : }
      70             : 
      71      288086 : inline sal_Bool Pair::operator != ( const Pair& rPair ) const
      72             : {
      73      288086 :     return ((nA != rPair.nA) || (nB != rPair.nB));
      74             : }
      75             : 
      76             : // Point
      77             : 
      78             : class SAL_WARN_UNUSED Point : public Pair
      79             : {
      80             : public:
      81             :                         Point();
      82             :                         Point( long nX, long nY );
      83             : 
      84     1876282 :     long                X() const { return nA; }
      85     1613977 :     long                Y() const { return nB; }
      86             : 
      87      600375 :     long&               X() { return nA; }
      88      565787 :     long&               Y() { return nB; }
      89             : 
      90             :     void                Move( long nHorzMove, long nVertMove );
      91             :     sal_Bool            IsAbove( const Point& rPoint ) const;
      92             :     sal_Bool            IsBelow( const Point& rPoint ) const;
      93             :     sal_Bool            IsLeft( const Point& rPoint ) const;
      94             :     sal_Bool            IsRight( const Point& rPoint ) const;
      95             : 
      96             :     Point&              operator += ( const Point& rPoint );
      97             :     Point&              operator -= ( const Point& rPoint );
      98             :     Point&              operator *= ( const long nVal );
      99             :     Point&              operator /= ( const long nVal );
     100             : 
     101             :     friend inline Point operator+( const Point &rVal1, const Point &rVal2 );
     102             :     friend inline Point operator-( const Point &rVal1, const Point &rVal2 );
     103             :     friend inline Point operator*( const Point &rVal1, const long nVal2 );
     104             :     friend inline Point operator/( const Point &rVal1, const long nVal2 );
     105             : 
     106      290035 :     long                getX() const { return X(); }
     107      237401 :     long                getY() const { return Y(); }
     108       16559 :     void                setX(long nX)  { X() = nX; }
     109       12361 :     void                setY(long nY)  { Y() = nY; }
     110             : };
     111             : 
     112      474842 : inline Point::Point()
     113             : {
     114      474842 : }
     115             : 
     116     1892223 : inline Point::Point( long nX, long nY ) : Pair( nX, nY )
     117             : {
     118     1892223 : }
     119             : 
     120           8 : inline void Point::Move( long nHorzMove, long nVertMove )
     121             : {
     122           8 :     nA += nHorzMove;
     123           8 :     nB += nVertMove;
     124           8 : }
     125             : 
     126             : inline sal_Bool Point::IsAbove( const Point& rPoint ) const
     127             : {
     128             :     return (nB > rPoint.nB);
     129             : }
     130             : 
     131             : inline sal_Bool Point::IsBelow( const Point& rPoint ) const
     132             : {
     133             :     return (nB < rPoint.nB);
     134             : }
     135             : 
     136             : inline sal_Bool Point::IsLeft( const Point& rPoint ) const
     137             : {
     138             :     return (nA < rPoint.nA);
     139             : }
     140             : 
     141             : inline sal_Bool Point::IsRight( const Point& rPoint ) const
     142             : {
     143             :     return (nA > rPoint.nA);
     144             : }
     145             : 
     146      104895 : inline Point& Point::operator += ( const Point& rPoint )
     147             : {
     148      104895 :     nA += rPoint.nA;
     149      104895 :     nB += rPoint.nB;
     150      104895 :     return *this;
     151             : }
     152             : 
     153       19864 : inline Point& Point::operator -= ( const Point& rPoint )
     154             : {
     155       19864 :     nA -= rPoint.nA;
     156       19864 :     nB -= rPoint.nB;
     157       19864 :     return *this;
     158             : }
     159             : 
     160           0 : inline Point& Point::operator *= ( const long nVal )
     161             : {
     162           0 :     nA *= nVal;
     163           0 :     nB *= nVal;
     164           0 :     return *this;
     165             : }
     166             : 
     167           0 : inline Point& Point::operator /= ( const long nVal )
     168             : {
     169           0 :     nA /= nVal;
     170           0 :     nB /= nVal;
     171           0 :     return *this;
     172             : }
     173             : 
     174      209344 : inline Point operator+( const Point &rVal1, const Point &rVal2 )
     175             : {
     176      209344 :     return Point( rVal1.nA+rVal2.nA, rVal1.nB+rVal2.nB );
     177             : }
     178             : 
     179      113980 : inline Point operator-( const Point &rVal1, const Point &rVal2 )
     180             : {
     181      113980 :     return Point( rVal1.nA-rVal2.nA, rVal1.nB-rVal2.nB );
     182             : }
     183             : 
     184           0 : inline Point operator*( const Point &rVal1, const long nVal2 )
     185             : {
     186           0 :     return Point( rVal1.nA*nVal2, rVal1.nB*nVal2 );
     187             : }
     188             : 
     189           0 : inline Point operator/( const Point &rVal1, const long nVal2 )
     190             : {
     191           0 :     return Point( rVal1.nA/nVal2, rVal1.nB/nVal2 );
     192             : }
     193             : 
     194             : template< typename charT, typename traits >
     195             : inline std::basic_ostream<charT, traits> & operator <<(
     196             :     std::basic_ostream<charT, traits> & stream, const Point& point )
     197             : {
     198             :     return stream << point.X() << ',' << point.Y();
     199             : }
     200             : 
     201             : // Size
     202             : 
     203             : class SAL_WARN_UNUSED Size : public Pair
     204             : {
     205             : public:
     206             :                     Size();
     207             :                     Size( long nWidth, long nHeight );
     208             : 
     209     1303758 :     long            Width() const  { return nA; }
     210     1128527 :     long            Height() const { return nB; }
     211             : 
     212     1318368 :     long&           Width()  { return nA; }
     213      689422 :     long&           Height() { return nB; }
     214             : 
     215      349691 :     long            getWidth() const { return Width(); }
     216      315502 :     long            getHeight() const { return Height(); }
     217       64464 :     void            setWidth(long nWidth)  { Width() = nWidth; }
     218       55078 :     void            setHeight(long nHeight)  { Height() = nHeight; }
     219             : };
     220             : 
     221      338940 : inline Size::Size()
     222             : {
     223      338940 : }
     224             : 
     225      908796 : inline Size::Size( long nWidth, long nHeight ) :
     226      908796 :                 Pair( nWidth, nHeight )
     227             : {
     228      908796 : }
     229             : 
     230             : template< typename charT, typename traits >
     231             : inline std::basic_ostream<charT, traits> & operator <<(
     232             :     std::basic_ostream<charT, traits> & stream, const Size& size )
     233             : {
     234             :     return stream << size.Width() << 'x' << size.Height();
     235             : }
     236             : 
     237             : // Range
     238             : 
     239             : #define RANGE_MAX   LONG_MAX
     240             : 
     241             : class SAL_WARN_UNUSED Range : public Pair
     242             : {
     243             : public:
     244             :                     Range();
     245             :                     Range( long nMin, long nMax );
     246             : 
     247          26 :     long            Min() const { return nA; }
     248          16 :     long            Max() const { return nB; }
     249       26174 :     long            Len() const { return nB - nA + 1; }
     250             : 
     251       51856 :     long&           Min() { return nA; }
     252      107842 :     long&           Max() { return nB; }
     253             : 
     254             :     sal_Bool        IsInside( long nIs ) const;
     255             : 
     256             :     void            Justify();
     257             : };
     258             : 
     259           0 : inline Range::Range()
     260             : {
     261           0 : }
     262             : 
     263       30897 : inline Range::Range( long nMin, long nMax ) : Pair( nMin, nMax )
     264             : {
     265       30897 : }
     266             : 
     267           0 : inline sal_Bool Range::IsInside( long nIs ) const
     268             : {
     269           0 :     return ((nA <= nIs) && (nIs <= nB ));
     270             : }
     271             : 
     272        2794 : inline void Range::Justify()
     273             : {
     274        2794 :     if ( nA > nB )
     275             :     {
     276           0 :         long nHelp = nA;
     277           0 :         nA = nB;
     278           0 :         nB = nHelp;
     279             :     }
     280        2794 : }
     281             : 
     282             : template< typename charT, typename traits >
     283             : inline std::basic_ostream<charT, traits> & operator <<(
     284             :     std::basic_ostream<charT, traits> & stream, const Range& range )
     285             : {
     286             :     return stream << range.Min() << '-' << range.Max();
     287             : }
     288             : 
     289             : // Selection
     290             : 
     291             : #define SELECTION_MIN   LONG_MIN
     292             : #define SELECTION_MAX   LONG_MAX
     293             : 
     294             : class SAL_WARN_UNUSED Selection : public Pair
     295             : {
     296             : public:
     297             :                     Selection();
     298             :                     Selection( long nPos );
     299             :                     Selection( long nMin, long nMax );
     300             : 
     301           0 :     long            Min() const { return nA; }
     302           0 :     long            Max() const { return nB; }
     303          42 :     long            Len() const { return nB - nA; }
     304             : 
     305          36 :     long&           Min() { return nA; }
     306          48 :     long&           Max() { return nB; }
     307             : 
     308             :     sal_Bool        IsInside( long nIs ) const;
     309             : 
     310             :     void            Justify();
     311             : 
     312           0 :     sal_Bool        operator !() const { return !Len(); }
     313             : 
     314           0 :     long            getMin() const { return Min(); }
     315             :     long            getMax() const { return Max(); }
     316           0 :     void            setMin(long nMin)  { Min() = nMin; }
     317           0 :     void            setMax(long nMax)  { Max() = nMax; }
     318             : };
     319             : 
     320         248 : inline Selection::Selection()
     321             : {
     322         248 : }
     323             : 
     324           0 : inline Selection::Selection( long nPos ) : Pair( nPos, nPos )
     325             : {
     326           0 : }
     327             : 
     328          12 : inline Selection::Selection( long nMin, long nMax ) :
     329          12 :            Pair( nMin, nMax )
     330             : {
     331          12 : }
     332             : 
     333           0 : inline sal_Bool Selection::IsInside( long nIs ) const
     334             : {
     335           0 :     return ((nA <= nIs) && (nIs < nB ));
     336             : }
     337             : 
     338          12 : inline void Selection::Justify()
     339             : {
     340          12 :     if ( nA > nB )
     341             :     {
     342           0 :         long nHelp = nA;
     343           0 :         nA = nB;
     344           0 :         nB = nHelp;
     345             :     }
     346          12 : }
     347             : 
     348             : template< typename charT, typename traits >
     349             : inline std::basic_ostream<charT, traits> & operator <<(
     350             :     std::basic_ostream<charT, traits> & stream, const Selection& selection )
     351             : {
     352             :     return stream << selection.Min() << '-' << selection.Max();
     353             : }
     354             : // Rectangle
     355             : 
     356             : #define RECT_EMPTY  ((short)-32767)
     357             : 
     358             : class TOOLS_DLLPUBLIC SAL_WARN_UNUSED Rectangle
     359             : {
     360             : public:
     361             :                         Rectangle();
     362             :                         Rectangle( const Point& rLT, const Point& rRB );
     363             :                         Rectangle( long nLeft, long nTop,
     364             :                                    long nRight, long nBottom );
     365             :                         Rectangle( const Point& rLT, const Size& rSize );
     366             : 
     367      278998 :     long                Left() const    { return nLeft;   }
     368      265265 :     long                Right() const   { return nRight;  }
     369      278946 :     long                Top() const     { return nTop;    }
     370      263345 :     long                Bottom() const  { return nBottom; }
     371             : 
     372      293728 :     long&               Left()          { return nLeft;   }
     373      244587 :     long&               Right()         { return nRight;  }
     374      327150 :     long&               Top()           { return nTop;    }
     375      197751 :     long&               Bottom()        { return nBottom; }
     376             : 
     377             :     inline Point        TopLeft() const;
     378             :     inline Point        TopRight() const;
     379             :     inline Point        TopCenter() const;
     380             :     inline Point        BottomLeft() const;
     381             :     inline Point        BottomRight() const;
     382             :     inline Point        BottomCenter() const;
     383             :     inline Point        LeftCenter() const;
     384             :     inline Point        RightCenter() const;
     385             :     inline Point        Center() const;
     386             : 
     387             :     inline void         Move( long nHorzMove, long nVertMove );
     388             :     inline void         Transpose();
     389             :     inline void         SetPos( const Point& rPoint );
     390             :     void                SetSize( const Size& rSize );
     391             :     inline Size         GetSize() const;
     392             : 
     393             :     inline long         GetWidth() const;
     394             :     inline long         GetHeight() const;
     395             : 
     396             :     Rectangle&          Union( const Rectangle& rRect );
     397             :     Rectangle&          Intersection( const Rectangle& rRect );
     398             :     inline Rectangle    GetUnion( const Rectangle& rRect ) const;
     399             :     inline Rectangle    GetIntersection( const Rectangle& rRect ) const;
     400             : 
     401             :     void                Justify();
     402             : 
     403             :     sal_Bool            IsInside( const Point& rPOINT ) const;
     404             :     sal_Bool            IsInside( const Rectangle& rRect ) const;
     405             :     sal_Bool            IsOver( const Rectangle& rRect ) const;
     406             : 
     407       35904 :     void                SetEmpty() { nRight = nBottom = RECT_EMPTY; }
     408             :     inline sal_Bool     IsEmpty() const;
     409             : 
     410             :     inline sal_Bool     operator == ( const Rectangle& rRect ) const;
     411             :     inline sal_Bool     operator != ( const Rectangle& rRect ) const;
     412             : 
     413             :     inline Rectangle&   operator += ( const Point& rPt );
     414             :     inline Rectangle&   operator -= ( const Point& rPt );
     415             : 
     416             :     friend inline Rectangle operator + ( const Rectangle& rRect, const Point& rPt );
     417             :     friend inline Rectangle operator - ( const Rectangle& rRect, const Point& rPt );
     418             : 
     419             :     TOOLS_DLLPUBLIC friend SvStream&    operator>>( SvStream& rIStream, Rectangle& rRect );
     420             :     TOOLS_DLLPUBLIC friend SvStream&    operator<<( SvStream& rOStream, const Rectangle& rRect );
     421             : 
     422             :     // ONE
     423           2 :     long                getX() const { return nLeft; }
     424           2 :     long                getY() const { return nTop; }
     425        3689 :     long                getWidth() const { return nRight - nLeft; }
     426        3731 :     long                getHeight() const { return nBottom - nTop; }
     427        1540 :     void                setX( long n ) { nRight += n-nLeft; nLeft = n; }
     428        1540 :     void                setY( long n ) { nBottom += n-nTop; nTop = n; }
     429        6326 :     void                setWidth( long n ) { nRight = nLeft + n; }
     430        7347 :     void                setHeight( long n ) { nBottom = nTop + n; }
     431             : 
     432             : private:
     433             :     long                nLeft;
     434             :     long                nTop;
     435             :     long                nRight;
     436             :     long                nBottom;
     437             : };
     438             : 
     439      355141 : inline Rectangle::Rectangle()
     440             : {
     441      355141 :     nLeft = nTop = 0;
     442      355141 :     nRight = nBottom = RECT_EMPTY;
     443      355141 : }
     444             : 
     445       46187 : inline Rectangle::Rectangle( const Point& rLT, const Point& rRB )
     446             : {
     447       46187 :     nLeft   = rLT.X();
     448       46187 :     nTop    = rLT.Y();
     449       46187 :     nRight  = rRB.X();
     450       46187 :     nBottom = rRB.Y();
     451       46187 : }
     452             : 
     453      159600 : inline Rectangle::Rectangle( long _nLeft,  long _nTop,
     454             :                              long _nRight, long _nBottom )
     455             : {
     456      159600 :     nLeft   = _nLeft;
     457      159600 :     nTop    = _nTop;
     458      159600 :     nRight  = _nRight;
     459      159600 :     nBottom = _nBottom;
     460      159600 : }
     461             : 
     462      165162 : inline Rectangle::Rectangle( const Point& rLT, const Size& rSize )
     463             : {
     464      165162 :     nLeft   = rLT.X();
     465      165162 :     nTop    = rLT.Y();
     466      165162 :     nRight  = rSize.Width()  ? nLeft+rSize.Width()-1 : RECT_EMPTY;
     467      165162 :     nBottom = rSize.Height() ? nTop+rSize.Height()-1 : RECT_EMPTY;
     468      165162 : }
     469             : 
     470      343524 : inline sal_Bool Rectangle::IsEmpty() const
     471             : {
     472      343524 :     return ((nRight == RECT_EMPTY) || (nBottom == RECT_EMPTY));
     473             : }
     474             : 
     475       87461 : inline Point Rectangle::TopLeft() const
     476             : {
     477       87461 :     return Point( nLeft, nTop );
     478             : }
     479             : 
     480       65314 : inline Point Rectangle::TopRight() const
     481             : {
     482       65314 :     return Point( (nRight == RECT_EMPTY) ? nLeft : nRight, nTop );
     483             : }
     484             : 
     485       18361 : inline Point Rectangle::BottomLeft() const
     486             : {
     487       18361 :     return Point( nLeft, (nBottom == RECT_EMPTY) ? nTop : nBottom );
     488             : }
     489             : 
     490       19074 : inline Point Rectangle::BottomRight() const
     491             : {
     492             :     return Point( (nRight  == RECT_EMPTY) ? nLeft : nRight,
     493       19074 :                   (nBottom == RECT_EMPTY) ? nTop  : nBottom );
     494             : }
     495             : 
     496           0 : inline Point Rectangle::TopCenter() const
     497             : {
     498           0 :     if ( IsEmpty() )
     499           0 :         return Point( nLeft, nTop );
     500             :     else
     501           0 :         return Point( Min( nLeft, nRight ) + Abs( (nRight - nLeft)/2 ),
     502           0 :                       Min( nTop,  nBottom) );
     503             : }
     504             : 
     505           0 : inline Point Rectangle::BottomCenter() const
     506             : {
     507           0 :     if ( IsEmpty() )
     508           0 :         return Point( nLeft, nTop );
     509             :     else
     510           0 :         return Point( Min( nLeft, nRight ) + Abs( (nRight - nLeft)/2 ),
     511           0 :                       Max( nTop,  nBottom) );
     512             : }
     513             : 
     514           0 : inline Point Rectangle::LeftCenter() const
     515             : {
     516           0 :     if ( IsEmpty() )
     517           0 :         return Point( nLeft, nTop );
     518             :     else
     519           0 :         return Point( Min( nLeft, nRight ), nTop + (nBottom - nTop)/2 );
     520             : }
     521             : 
     522           0 : inline Point Rectangle::RightCenter() const
     523             : {
     524           0 :     if ( IsEmpty() )
     525           0 :         return Point( nLeft, nTop );
     526             :     else
     527           0 :         return Point( Max( nLeft, nRight ), nTop + (nBottom - nTop)/2 );
     528             : }
     529             : 
     530       10179 : inline Point Rectangle::Center() const
     531             : {
     532       10179 :     if ( IsEmpty() )
     533        2753 :         return Point( nLeft, nTop );
     534             :     else
     535        7426 :         return Point( nLeft+(nRight-nLeft)/2 , nTop+(nBottom-nTop)/2 );
     536             : }
     537             : 
     538       23683 : inline void Rectangle::Move( long nHorzMove, long nVertMove )
     539             : {
     540       23683 :     nLeft += nHorzMove;
     541       23683 :     nTop  += nVertMove;
     542       23683 :     if ( nRight != RECT_EMPTY )
     543       16791 :         nRight += nHorzMove;
     544       23683 :     if ( nBottom != RECT_EMPTY )
     545       16995 :         nBottom += nVertMove;
     546       23683 : }
     547             : 
     548           0 : void Rectangle::Transpose()
     549             : {
     550           0 :     if ( !IsEmpty() )
     551             :     {
     552           0 :         long swap( nLeft );
     553           0 :         nLeft = nTop;
     554           0 :         nTop = swap;
     555             : 
     556           0 :         swap = nRight;
     557           0 :         nRight = nBottom;
     558           0 :         nBottom = swap;
     559             :     }
     560           0 : }
     561             : 
     562        1910 : inline void Rectangle::SetPos( const Point& rPoint )
     563             : {
     564        1910 :     if ( nRight != RECT_EMPTY )
     565        1835 :         nRight += rPoint.X() - nLeft;
     566        1910 :     if ( nBottom != RECT_EMPTY )
     567        1835 :         nBottom += rPoint.Y() - nTop;
     568        1910 :     nLeft = rPoint.X();
     569        1910 :     nTop  = rPoint.Y();
     570        1910 : }
     571             : 
     572      109652 : inline long Rectangle::GetWidth() const
     573             : {
     574             :     long n;
     575      109652 :     if ( nRight == RECT_EMPTY )
     576        6341 :         n = 0;
     577             :     else
     578             :     {
     579      103311 :         n = nRight - nLeft;
     580      103311 :         if( n < 0 )
     581         369 :             n--;
     582             :         else
     583      102942 :             n++;
     584             :     }
     585             : 
     586      109652 :     return n;
     587             : }
     588             : 
     589      132554 : inline long Rectangle::GetHeight() const
     590             : {
     591             :     long n;
     592      132554 :     if ( nBottom == RECT_EMPTY )
     593        5931 :         n = 0;
     594             :     else
     595             :     {
     596      126623 :         n = nBottom - nTop;
     597      126623 :         if ( n < 0 )
     598         699 :             n--;
     599             :         else
     600      125924 :             n++;
     601             :     }
     602             : 
     603      132554 :     return n;
     604             : }
     605             : 
     606       22859 : inline Size Rectangle::GetSize() const
     607             : {
     608       22859 :     return Size( GetWidth(), GetHeight() );
     609             : }
     610             : 
     611           0 : inline Rectangle Rectangle::GetUnion( const Rectangle& rRect ) const
     612             : {
     613           0 :     Rectangle aTmpRect( *this );
     614           0 :     return aTmpRect.Union( rRect );
     615             : }
     616             : 
     617           0 : inline Rectangle Rectangle::GetIntersection( const Rectangle& rRect ) const
     618             : {
     619           0 :     Rectangle aTmpRect( *this );
     620           0 :     return aTmpRect.Intersection( rRect );
     621             : }
     622             : 
     623        1831 : inline sal_Bool Rectangle::operator == ( const Rectangle& rRect ) const
     624             : {
     625             :     return ((nLeft   == rRect.nLeft   ) &&
     626             :             (nTop    == rRect.nTop    ) &&
     627             :             (nRight  == rRect.nRight  ) &&
     628        1831 :             (nBottom == rRect.nBottom ));
     629             : }
     630             : 
     631        2437 : inline sal_Bool Rectangle::operator != ( const Rectangle& rRect ) const
     632             : {
     633             :     return ((nLeft   != rRect.nLeft   ) ||
     634             :             (nTop    != rRect.nTop    ) ||
     635             :             (nRight  != rRect.nRight  ) ||
     636        2437 :             (nBottom != rRect.nBottom ));
     637             : }
     638             : 
     639       48929 : inline Rectangle& Rectangle::operator +=( const Point& rPt )
     640             : {
     641       48929 :     nLeft += rPt.X();
     642       48929 :     nTop  += rPt.Y();
     643       48929 :     if ( nRight != RECT_EMPTY )
     644       46433 :         nRight += rPt.X();
     645       48929 :     if ( nBottom != RECT_EMPTY )
     646       46207 :         nBottom += rPt.Y();
     647       48929 :     return *this;
     648             : }
     649             : 
     650         332 : inline Rectangle& Rectangle::operator -= ( const Point& rPt )
     651             : {
     652         332 :     nLeft -= rPt.X();
     653         332 :     nTop  -= rPt.Y();
     654         332 :     if ( nRight != RECT_EMPTY )
     655         332 :         nRight -= rPt.X();
     656         332 :     if ( nBottom != RECT_EMPTY )
     657         332 :         nBottom -= rPt.Y();
     658         332 :     return *this;
     659             : }
     660             : 
     661        1873 : inline Rectangle operator + ( const Rectangle& rRect, const Point& rPt )
     662             : {
     663        3746 :     Rectangle aRect( rRect.nLeft  + rPt.X(), rRect.nTop    + rPt.Y(),
     664        1873 :                      (rRect.nRight  == RECT_EMPTY) ? RECT_EMPTY : rRect.nRight + rPt.X(),
     665        7492 :                      (rRect.nBottom == RECT_EMPTY) ? RECT_EMPTY : rRect.nBottom + rPt.Y() );
     666        1873 :     return aRect;
     667             : }
     668             : 
     669        1024 : inline Rectangle operator - ( const Rectangle& rRect, const Point& rPt )
     670             : {
     671        1024 :     Rectangle aRect( rRect.nLeft - rPt.X(),
     672        1024 :                      rRect.nTop - rPt.Y(),
     673        1024 :                      (rRect.nRight  == RECT_EMPTY) ? RECT_EMPTY : rRect.nRight - rPt.X(),
     674        4096 :                      (rRect.nBottom == RECT_EMPTY) ? RECT_EMPTY : rRect.nBottom - rPt.Y() );
     675        1024 :     return aRect;
     676             : }
     677             : 
     678             : template< typename charT, typename traits >
     679             : inline std::basic_ostream<charT, traits> & operator <<(
     680             :     std::basic_ostream<charT, traits> & stream, const Rectangle& rectangle )
     681             : {
     682             :     return stream << rectangle.getX() << ',' << rectangle.getY() << ' '
     683             :         << rectangle.getWidth() << 'x' << rectangle.getHeight();
     684             : }
     685             : 
     686             : #endif
     687             : 
     688             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10