LCOV - code coverage report
Current view: top level - include/tools - gen.hxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 234 269 87.0 %
Date: 2014-11-03 Functions: 93 106 87.7 %
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 INCLUDED_TOOLS_GEN_HXX
      20             : #define INCLUDED_TOOLS_GEN_HXX
      21             : 
      22             : #include <tools/toolsdllapi.h>
      23             : 
      24             : #include <limits.h>
      25             : #include <algorithm>
      26             : #include <ostream>
      27             : #include <cstdlib>
      28             : 
      29             : class SvStream;
      30             : 
      31             : enum TriState { TRISTATE_FALSE, TRISTATE_TRUE, TRISTATE_INDET };
      32             : 
      33             : // Pair
      34             : 
      35             : class SAL_WARN_UNUSED Pair
      36             : {
      37             : public:
      38             :                         Pair();
      39             :                         Pair( long nA, long nB );
      40             : 
      41           4 :     long                A() const { return nA; }
      42           4 :     long                B() const { return nB; }
      43             : 
      44      227037 :     long&               A() { return nA; }
      45      226971 :     long&               B() { return nB; }
      46             : 
      47             :     bool                operator == ( const Pair& rPair ) const;
      48             :     bool                operator != ( const Pair& rPair ) const;
      49             : 
      50             :     TOOLS_DLLPUBLIC friend SvStream&    ReadPair( SvStream& rIStream, Pair& rPair );
      51             :     TOOLS_DLLPUBLIC friend SvStream&    WritePair( SvStream& rOStream, const Pair& rPair );
      52             : 
      53             : protected:
      54             :     long                nA;
      55             :     long                nB;
      56             : };
      57             : 
      58    69192570 : inline Pair::Pair()
      59             : {
      60    69192570 :     nA = nB = 0;
      61    69192570 : }
      62             : 
      63   147289132 : inline Pair::Pair( long _nA, long _nB )
      64             : {
      65   147289132 :     Pair::nA = _nA;
      66   147289132 :     Pair::nB = _nB;
      67   147289132 : }
      68             : 
      69     2437148 : inline bool Pair::operator == ( const Pair& rPair ) const
      70             : {
      71     2437148 :     return ((nA == rPair.nA) && (nB == rPair.nB));
      72             : }
      73             : 
      74    22259674 : inline bool Pair::operator != ( const Pair& rPair ) const
      75             : {
      76    22259674 :     return ((nA != rPair.nA) || (nB != rPair.nB));
      77             : }
      78             : 
      79             : // Point
      80             : 
      81             : class SAL_DLLPUBLIC_EXPORT SAL_WARN_UNUSED Point : public Pair
      82             : {
      83             : public:
      84             :                         Point();
      85             :                         Point( long nX, long nY );
      86             : 
      87   120753720 :     long                X() const { return nA; }
      88    74613412 :     long                Y() const { return nB; }
      89             : 
      90   129078623 :     long&               X() { return nA; }
      91   121905009 :     long&               Y() { return nB; }
      92             : 
      93             :     void                Move( long nHorzMove, long nVertMove );
      94             :     bool                IsAbove( const Point& rPoint ) const;
      95             :     bool                IsBelow( const Point& rPoint ) const;
      96             :     bool                IsLeft( const Point& rPoint ) const;
      97             :     bool                IsRight( const Point& rPoint ) const;
      98             : 
      99             :     void                RotateAround( long& rX, long& rY, short nOrientation ) const;
     100             : 
     101             : 
     102             :     Point&              operator += ( const Point& rPoint );
     103             :     Point&              operator -= ( const Point& rPoint );
     104             :     Point&              operator *= ( const long nVal );
     105             :     Point&              operator /= ( const long nVal );
     106             : 
     107             :     friend inline Point operator+( const Point &rVal1, const Point &rVal2 );
     108             :     friend inline Point operator-( const Point &rVal1, const Point &rVal2 );
     109             :     friend inline Point operator*( const Point &rVal1, const long nVal2 );
     110             :     friend inline Point operator/( const Point &rVal1, const long nVal2 );
     111             : 
     112    21360353 :     long                getX() const { return X(); }
     113    16296647 :     long                getY() const { return Y(); }
     114     1349590 :     void                setX(long nX)  { X() = nX; }
     115     1579736 :     void                setY(long nY)  { Y() = nY; }
     116             : };
     117             : 
     118    14309512 : inline Point::Point()
     119             : {
     120    14309512 : }
     121             : 
     122   113227370 : inline Point::Point( long nX, long nY ) : Pair( nX, nY )
     123             : {
     124   113227370 : }
     125             : 
     126        2132 : inline void Point::Move( long nHorzMove, long nVertMove )
     127             : {
     128        2132 :     nA += nHorzMove;
     129        2132 :     nB += nVertMove;
     130        2132 : }
     131             : 
     132             : inline bool Point::IsAbove( const Point& rPoint ) const
     133             : {
     134             :     return (nB > rPoint.nB);
     135             : }
     136             : 
     137             : inline bool Point::IsBelow( const Point& rPoint ) const
     138             : {
     139             :     return (nB < rPoint.nB);
     140             : }
     141             : 
     142             : inline bool Point::IsLeft( const Point& rPoint ) const
     143             : {
     144             :     return (nA < rPoint.nA);
     145             : }
     146             : 
     147             : inline bool Point::IsRight( const Point& rPoint ) const
     148             : {
     149             :     return (nA > rPoint.nA);
     150             : }
     151             : 
     152     5962144 : inline Point& Point::operator += ( const Point& rPoint )
     153             : {
     154     5962144 :     nA += rPoint.nA;
     155     5962144 :     nB += rPoint.nB;
     156     5962144 :     return *this;
     157             : }
     158             : 
     159      437972 : inline Point& Point::operator -= ( const Point& rPoint )
     160             : {
     161      437972 :     nA -= rPoint.nA;
     162      437972 :     nB -= rPoint.nB;
     163      437972 :     return *this;
     164             : }
     165             : 
     166        1758 : inline Point& Point::operator *= ( const long nVal )
     167             : {
     168        1758 :     nA *= nVal;
     169        1758 :     nB *= nVal;
     170        1758 :     return *this;
     171             : }
     172             : 
     173           0 : inline Point& Point::operator /= ( const long nVal )
     174             : {
     175           0 :     nA /= nVal;
     176           0 :     nB /= nVal;
     177           0 :     return *this;
     178             : }
     179             : 
     180     5416105 : inline Point operator+( const Point &rVal1, const Point &rVal2 )
     181             : {
     182     5416105 :     return Point( rVal1.nA+rVal2.nA, rVal1.nB+rVal2.nB );
     183             : }
     184             : 
     185     4972077 : inline Point operator-( const Point &rVal1, const Point &rVal2 )
     186             : {
     187     4972077 :     return Point( rVal1.nA-rVal2.nA, rVal1.nB-rVal2.nB );
     188             : }
     189             : 
     190           0 : inline Point operator*( const Point &rVal1, const long nVal2 )
     191             : {
     192           0 :     return Point( rVal1.nA*nVal2, rVal1.nB*nVal2 );
     193             : }
     194             : 
     195           0 : inline Point operator/( const Point &rVal1, const long nVal2 )
     196             : {
     197           0 :     return Point( rVal1.nA/nVal2, rVal1.nB/nVal2 );
     198             : }
     199             : 
     200             : template< typename charT, typename traits >
     201             : inline std::basic_ostream<charT, traits> & operator <<(
     202             :     std::basic_ostream<charT, traits> & stream, const Point& point )
     203             : {
     204             :     return stream << point.X() << ',' << point.Y();
     205             : }
     206             : 
     207             : // Size
     208             : 
     209             : class SAL_WARN_UNUSED Size : public Pair
     210             : {
     211             : public:
     212             :                     Size();
     213             :                     Size( long nWidth, long nHeight );
     214             : 
     215    54213097 :     long            Width() const  { return nA; }
     216    54377986 :     long            Height() const { return nB; }
     217             : 
     218   152159138 :     long&           Width()  { return nA; }
     219    27533231 :     long&           Height() { return nB; }
     220             : 
     221    20474156 :     long            getWidth() const { return Width(); }
     222    22103126 :     long            getHeight() const { return Height(); }
     223     6089036 :     void            setWidth(long nWidth)  { Width() = nWidth; }
     224     5927076 :     void            setHeight(long nHeight)  { Height() = nHeight; }
     225             : };
     226             : 
     227    54856660 : inline Size::Size()
     228             : {
     229    54856660 : }
     230             : 
     231    33340371 : inline Size::Size( long nWidth, long nHeight ) :
     232    33340371 :                 Pair( nWidth, nHeight )
     233             : {
     234    33340371 : }
     235             : 
     236             : template< typename charT, typename traits >
     237           0 : inline std::basic_ostream<charT, traits> & operator <<(
     238             :     std::basic_ostream<charT, traits> & stream, const Size& size )
     239             : {
     240           0 :     return stream << size.Width() << 'x' << size.Height();
     241             : }
     242             : 
     243             : // Range
     244             : 
     245             : #define RANGE_MAX   LONG_MAX
     246             : 
     247             : class SAL_WARN_UNUSED Range : public Pair
     248             : {
     249             : public:
     250             :                     Range();
     251             :                     Range( long nMin, long nMax );
     252             : 
     253       33948 :     long            Min() const { return nA; }
     254       33896 :     long            Max() const { return nB; }
     255      386342 :     long            Len() const { return nB - nA + 1; }
     256             : 
     257     1106662 :     long&           Min() { return nA; }
     258     1894774 :     long&           Max() { return nB; }
     259             : 
     260             :     bool            IsInside( long nIs ) const;
     261             : 
     262             :     void            Justify();
     263             : };
     264             : 
     265         739 : inline Range::Range()
     266             : {
     267         739 : }
     268             : 
     269      705243 : inline Range::Range( long nMin, long nMax ) : Pair( nMin, nMax )
     270             : {
     271      705243 : }
     272             : 
     273         860 : inline bool Range::IsInside( long nIs ) const
     274             : {
     275         860 :     return ((nA <= nIs) && (nIs <= nB ));
     276             : }
     277             : 
     278      136179 : inline void Range::Justify()
     279             : {
     280      136179 :     if ( nA > nB )
     281             :     {
     282        1924 :         long nHelp = nA;
     283        1924 :         nA = nB;
     284        1924 :         nB = nHelp;
     285             :     }
     286      136179 : }
     287             : 
     288             : template< typename charT, typename traits >
     289             : inline std::basic_ostream<charT, traits> & operator <<(
     290             :     std::basic_ostream<charT, traits> & stream, const Range& range )
     291             : {
     292             :     return stream << range.Min() << '-' << range.Max();
     293             : }
     294             : 
     295             : // Selection
     296             : 
     297             : #define SELECTION_MIN   LONG_MIN
     298             : #define SELECTION_MAX   LONG_MAX
     299             : 
     300             : class SAL_WARN_UNUSED Selection : public Pair
     301             : {
     302             : public:
     303             :                     Selection();
     304             :                     Selection( long nPos );
     305             :                     Selection( long nMin, long nMax );
     306             : 
     307           0 :     long            Min() const { return nA; }
     308           0 :     long            Max() const { return nB; }
     309       86324 :     long            Len() const { return nB - nA; }
     310             : 
     311      153392 :     long&           Min() { return nA; }
     312      146831 :     long&           Max() { return nB; }
     313             : 
     314             :     bool            IsInside( long nIs ) const;
     315             : 
     316             :     void            Justify();
     317             : 
     318        2048 :     bool            operator !() const { return !Len(); }
     319             : 
     320           0 :     long            getMin() const { return Min(); }
     321             :     long            getMax() const { return Max(); }
     322           0 :     void            setMin(long nMin)  { Min() = nMin; }
     323           0 :     void            setMax(long nMax)  { Max() = nMax; }
     324             : };
     325             : 
     326       25659 : inline Selection::Selection()
     327             : {
     328       25659 : }
     329             : 
     330           0 : inline Selection::Selection( long nPos ) : Pair( nPos, nPos )
     331             : {
     332           0 : }
     333             : 
     334       16104 : inline Selection::Selection( long nMin, long nMax ) :
     335       16104 :            Pair( nMin, nMax )
     336             : {
     337       16104 : }
     338             : 
     339           0 : inline bool Selection::IsInside( long nIs ) const
     340             : {
     341           0 :     return ((nA <= nIs) && (nIs < nB ));
     342             : }
     343             : 
     344       25454 : inline void Selection::Justify()
     345             : {
     346       25454 :     if ( nA > nB )
     347             :     {
     348           2 :         long nHelp = nA;
     349           2 :         nA = nB;
     350           2 :         nB = nHelp;
     351             :     }
     352       25454 : }
     353             : 
     354             : template< typename charT, typename traits >
     355             : inline std::basic_ostream<charT, traits> & operator <<(
     356             :     std::basic_ostream<charT, traits> & stream, const Selection& selection )
     357             : {
     358             :     return stream << selection.Min() << '-' << selection.Max();
     359             : }
     360             : // Rectangle
     361             : 
     362             : #define RECT_EMPTY  ((short)-32767)
     363             : #define RECT_MAX    LONG_MAX
     364             : #define RECT_MIN    LONG_MIN
     365             : 
     366             : class TOOLS_DLLPUBLIC SAL_WARN_UNUSED Rectangle
     367             : {
     368             : public:
     369             :                         Rectangle();
     370             :                         Rectangle( const Point& rLT, const Point& rRB );
     371             :                         Rectangle( long nLeft, long nTop,
     372             :                                    long nRight, long nBottom );
     373             :                         Rectangle( const Point& rLT, const Size& rSize );
     374             : 
     375    20853484 :     long                Left() const    { return nLeft;   }
     376    19646048 :     long                Right() const   { return nRight;  }
     377    20289031 :     long                Top() const     { return nTop;    }
     378    19374698 :     long                Bottom() const  { return nBottom; }
     379             : 
     380    17571958 :     long&               Left()          { return nLeft;   }
     381     6005778 :     long&               Right()         { return nRight;  }
     382    19128029 :     long&               Top()           { return nTop;    }
     383     8228073 :     long&               Bottom()        { return nBottom; }
     384             : 
     385             :     inline Point        TopLeft() const;
     386             :     inline Point        TopRight() const;
     387             :     inline Point        TopCenter() const;
     388             :     inline Point        BottomLeft() const;
     389             :     inline Point        BottomRight() const;
     390             :     inline Point        BottomCenter() const;
     391             :     inline Point        LeftCenter() const;
     392             :     inline Point        RightCenter() const;
     393             :     inline Point        Center() const;
     394             : 
     395             :     inline void         Move( long nHorzMove, long nVertMove );
     396             :     inline void         Transpose();
     397             :     inline void         SetPos( const Point& rPoint );
     398             :     void                SetSize( const Size& rSize );
     399             :     inline Size         GetSize() const;
     400             : 
     401             :     inline long         GetWidth() const;
     402             :     inline long         GetHeight() const;
     403             : 
     404             :     Rectangle&          Union( const Rectangle& rRect );
     405             :     Rectangle&          Intersection( const Rectangle& rRect );
     406             :     inline Rectangle    GetUnion( const Rectangle& rRect ) const;
     407             :     inline Rectangle    GetIntersection( const Rectangle& rRect ) const;
     408             : 
     409             :     void                Justify();
     410             : 
     411             :     bool                IsInside( const Point& rPOINT ) const;
     412             :     bool                IsInside( const Rectangle& rRect ) const;
     413             :     bool                IsOver( const Rectangle& rRect ) const;
     414             : 
     415      835492 :     void                SetEmpty() { nRight = nBottom = RECT_EMPTY; }
     416             :     inline bool         IsEmpty() const;
     417             : 
     418             :     inline bool         operator == ( const Rectangle& rRect ) const;
     419             :     inline bool         operator != ( const Rectangle& rRect ) const;
     420             : 
     421             :     inline Rectangle&   operator += ( const Point& rPt );
     422             :     inline Rectangle&   operator -= ( const Point& rPt );
     423             : 
     424             :     friend inline Rectangle operator + ( const Rectangle& rRect, const Point& rPt );
     425             :     friend inline Rectangle operator - ( const Rectangle& rRect, const Point& rPt );
     426             : 
     427             :     TOOLS_DLLPUBLIC friend SvStream&    ReadRectangle( SvStream& rIStream, Rectangle& rRect );
     428             :     TOOLS_DLLPUBLIC friend SvStream&    WriteRectangle( SvStream& rOStream, const Rectangle& rRect );
     429             : 
     430             :     // ONE
     431        3459 :     long                getX() const { return nLeft; }
     432        6284 :     long                getY() const { return nTop; }
     433      115631 :     long                getWidth() const { return nRight - nLeft; }
     434      126662 :     long                getHeight() const { return nBottom - nTop; }
     435       38840 :     void                setX( long n ) { nRight += n-nLeft; nLeft = n; }
     436       38453 :     void                setY( long n ) { nBottom += n-nTop; nTop = n; }
     437      131229 :     void                setWidth( long n ) { nRight = nLeft + n; }
     438      157311 :     void                setHeight( long n ) { nBottom = nTop + n; }
     439             : 
     440             : private:
     441             :     long                nLeft;
     442             :     long                nTop;
     443             :     long                nRight;
     444             :     long                nBottom;
     445             : };
     446             : 
     447    12072685 : inline Rectangle::Rectangle()
     448             : {
     449    12072685 :     nLeft = nTop = 0;
     450    12072685 :     nRight = nBottom = RECT_EMPTY;
     451    12072685 : }
     452             : 
     453      692010 : inline Rectangle::Rectangle( const Point& rLT, const Point& rRB )
     454             : {
     455      692010 :     nLeft   = rLT.X();
     456      692010 :     nTop    = rLT.Y();
     457      692010 :     nRight  = rRB.X();
     458      692010 :     nBottom = rRB.Y();
     459      692010 : }
     460             : 
     461     7977952 : inline Rectangle::Rectangle( long _nLeft,  long _nTop,
     462             :                              long _nRight, long _nBottom )
     463             : {
     464     7977952 :     nLeft   = _nLeft;
     465     7977952 :     nTop    = _nTop;
     466     7977952 :     nRight  = _nRight;
     467     7977952 :     nBottom = _nBottom;
     468     7977952 : }
     469             : 
     470     7644613 : inline Rectangle::Rectangle( const Point& rLT, const Size& rSize )
     471             : {
     472     7644613 :     nLeft   = rLT.X();
     473     7644613 :     nTop    = rLT.Y();
     474     7644613 :     nRight  = rSize.Width()  ? nLeft+rSize.Width()-1 : RECT_EMPTY;
     475     7644613 :     nBottom = rSize.Height() ? nTop+rSize.Height()-1 : RECT_EMPTY;
     476     7644613 : }
     477             : 
     478    20943718 : inline bool Rectangle::IsEmpty() const
     479             : {
     480    20943718 :     return ((nRight == RECT_EMPTY) || (nBottom == RECT_EMPTY));
     481             : }
     482             : 
     483     5436345 : inline Point Rectangle::TopLeft() const
     484             : {
     485     5436345 :     return Point( nLeft, nTop );
     486             : }
     487             : 
     488     3769192 : inline Point Rectangle::TopRight() const
     489             : {
     490     3769192 :     return Point( (nRight == RECT_EMPTY) ? nLeft : nRight, nTop );
     491             : }
     492             : 
     493     3765222 : inline Point Rectangle::BottomLeft() const
     494             : {
     495     3765222 :     return Point( nLeft, (nBottom == RECT_EMPTY) ? nTop : nBottom );
     496             : }
     497             : 
     498     3856332 : inline Point Rectangle::BottomRight() const
     499             : {
     500     3856332 :     return Point( (nRight  == RECT_EMPTY) ? nLeft : nRight,
     501     7712664 :                   (nBottom == RECT_EMPTY) ? nTop  : nBottom );
     502             : }
     503             : 
     504         468 : inline Point Rectangle::TopCenter() const
     505             : {
     506         468 :     if ( IsEmpty() )
     507           0 :         return Point( nLeft, nTop );
     508             :     else
     509         936 :         return Point( std::min( nLeft, nRight ) + std::abs( (nRight - nLeft)/2 ),
     510        1404 :                       std::min( nTop,  nBottom) );
     511             : }
     512             : 
     513         498 : inline Point Rectangle::BottomCenter() const
     514             : {
     515         498 :     if ( IsEmpty() )
     516           0 :         return Point( nLeft, nTop );
     517             :     else
     518         996 :         return Point( std::min( nLeft, nRight ) + std::abs( (nRight - nLeft)/2 ),
     519        1494 :                       std::max( nTop,  nBottom) );
     520             : }
     521             : 
     522         468 : inline Point Rectangle::LeftCenter() const
     523             : {
     524         468 :     if ( IsEmpty() )
     525           0 :         return Point( nLeft, nTop );
     526             :     else
     527         468 :         return Point( std::min( nLeft, nRight ), nTop + (nBottom - nTop)/2 );
     528             : }
     529             : 
     530         468 : inline Point Rectangle::RightCenter() const
     531             : {
     532         468 :     if ( IsEmpty() )
     533           0 :         return Point( nLeft, nTop );
     534             :     else
     535         468 :         return Point( std::max( nLeft, nRight ), nTop + (nBottom - nTop)/2 );
     536             : }
     537             : 
     538      432269 : inline Point Rectangle::Center() const
     539             : {
     540      432269 :     if ( IsEmpty() )
     541       52669 :         return Point( nLeft, nTop );
     542             :     else
     543      379600 :         return Point( nLeft+(nRight-nLeft)/2 , nTop+(nBottom-nTop)/2 );
     544             : }
     545             : 
     546      508174 : inline void Rectangle::Move( long nHorzMove, long nVertMove )
     547             : {
     548      508174 :     nLeft += nHorzMove;
     549      508174 :     nTop  += nVertMove;
     550      508174 :     if ( nRight != RECT_EMPTY )
     551      383954 :         nRight += nHorzMove;
     552      508174 :     if ( nBottom != RECT_EMPTY )
     553      380776 :         nBottom += nVertMove;
     554      508174 : }
     555             : 
     556           0 : void Rectangle::Transpose()
     557             : {
     558           0 :     if ( !IsEmpty() )
     559             :     {
     560           0 :         long swap( nLeft );
     561           0 :         nLeft = nTop;
     562           0 :         nTop = swap;
     563             : 
     564           0 :         swap = nRight;
     565           0 :         nRight = nBottom;
     566           0 :         nBottom = swap;
     567             :     }
     568           0 : }
     569             : 
     570       13721 : inline void Rectangle::SetPos( const Point& rPoint )
     571             : {
     572       13721 :     if ( nRight != RECT_EMPTY )
     573        9475 :         nRight += rPoint.X() - nLeft;
     574       13721 :     if ( nBottom != RECT_EMPTY )
     575        9475 :         nBottom += rPoint.Y() - nTop;
     576       13721 :     nLeft = rPoint.X();
     577       13721 :     nTop  = rPoint.Y();
     578       13721 : }
     579             : 
     580     5401457 : inline long Rectangle::GetWidth() const
     581             : {
     582             :     long n;
     583     5401457 :     if ( nRight == RECT_EMPTY )
     584      126441 :         n = 0;
     585             :     else
     586             :     {
     587     5275016 :         n = nRight - nLeft;
     588     5275016 :         if( n < 0 )
     589        9346 :             n--;
     590             :         else
     591     5265670 :             n++;
     592             :     }
     593             : 
     594     5401457 :     return n;
     595             : }
     596             : 
     597     5762591 : inline long Rectangle::GetHeight() const
     598             : {
     599             :     long n;
     600     5762591 :     if ( nBottom == RECT_EMPTY )
     601      117967 :         n = 0;
     602             :     else
     603             :     {
     604     5644624 :         n = nBottom - nTop;
     605     5644624 :         if ( n < 0 )
     606       19943 :             n--;
     607             :         else
     608     5624681 :             n++;
     609             :     }
     610             : 
     611     5762591 :     return n;
     612             : }
     613             : 
     614      911896 : inline Size Rectangle::GetSize() const
     615             : {
     616      911896 :     return Size( GetWidth(), GetHeight() );
     617             : }
     618             : 
     619           0 : inline Rectangle Rectangle::GetUnion( const Rectangle& rRect ) const
     620             : {
     621           0 :     Rectangle aTmpRect( *this );
     622           0 :     return aTmpRect.Union( rRect );
     623             : }
     624             : 
     625      391260 : inline Rectangle Rectangle::GetIntersection( const Rectangle& rRect ) const
     626             : {
     627      391260 :     Rectangle aTmpRect( *this );
     628      391260 :     return aTmpRect.Intersection( rRect );
     629             : }
     630             : 
     631      175442 : inline bool Rectangle::operator == ( const Rectangle& rRect ) const
     632             : {
     633      274156 :     return ((nLeft   == rRect.nLeft   ) &&
     634      196452 :             (nTop    == rRect.nTop    ) &&
     635      343848 :             (nRight  == rRect.nRight  ) &&
     636      246110 :             (nBottom == rRect.nBottom ));
     637             : }
     638             : 
     639      397282 : inline bool Rectangle::operator != ( const Rectangle& rRect ) const
     640             : {
     641      674954 :     return ((nLeft   != rRect.nLeft   ) ||
     642      550705 :             (nTop    != rRect.nTop    ) ||
     643      910602 :             (nRight  != rRect.nRight  ) ||
     644      637569 :             (nBottom != rRect.nBottom ));
     645             : }
     646             : 
     647     1197922 : inline Rectangle& Rectangle::operator +=( const Point& rPt )
     648             : {
     649     1197922 :     nLeft += rPt.X();
     650     1197922 :     nTop  += rPt.Y();
     651     1197922 :     if ( nRight != RECT_EMPTY )
     652     1196881 :         nRight += rPt.X();
     653     1197922 :     if ( nBottom != RECT_EMPTY )
     654     1168965 :         nBottom += rPt.Y();
     655     1197922 :     return *this;
     656             : }
     657             : 
     658       27687 : inline Rectangle& Rectangle::operator -= ( const Point& rPt )
     659             : {
     660       27687 :     nLeft -= rPt.X();
     661       27687 :     nTop  -= rPt.Y();
     662       27687 :     if ( nRight != RECT_EMPTY )
     663       27687 :         nRight -= rPt.X();
     664       27687 :     if ( nBottom != RECT_EMPTY )
     665       27687 :         nBottom -= rPt.Y();
     666       27687 :     return *this;
     667             : }
     668             : 
     669       32688 : inline Rectangle operator + ( const Rectangle& rRect, const Point& rPt )
     670             : {
     671       65376 :     Rectangle aRect( rRect.nLeft  + rPt.X(), rRect.nTop    + rPt.Y(),
     672       65376 :                      (rRect.nRight  == RECT_EMPTY) ? RECT_EMPTY : rRect.nRight + rPt.X(),
     673      163440 :                      (rRect.nBottom == RECT_EMPTY) ? RECT_EMPTY : rRect.nBottom + rPt.Y() );
     674       32688 :     return aRect;
     675             : }
     676             : 
     677        2839 : inline Rectangle operator - ( const Rectangle& rRect, const Point& rPt )
     678             : {
     679        2839 :     Rectangle aRect( rRect.nLeft - rPt.X(),
     680        2839 :                      rRect.nTop - rPt.Y(),
     681        5678 :                      (rRect.nRight  == RECT_EMPTY) ? RECT_EMPTY : rRect.nRight - rPt.X(),
     682       14195 :                      (rRect.nBottom == RECT_EMPTY) ? RECT_EMPTY : rRect.nBottom - rPt.Y() );
     683        2839 :     return aRect;
     684             : }
     685             : 
     686             : template< typename charT, typename traits >
     687             : inline std::basic_ostream<charT, traits> & operator <<(
     688             :     std::basic_ostream<charT, traits> & stream, const Rectangle& rectangle )
     689             : {
     690             :     if (rectangle.IsEmpty())
     691             :         return stream << "EMPTY";
     692             :     else
     693             :         return stream << rectangle.getWidth() << 'x' << rectangle.getHeight()
     694             :                       << "@(" << rectangle.getX() << ',' << rectangle.getY() << ")";
     695             : }
     696             : 
     697             : #endif
     698             : 
     699             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10