LCOV - code coverage report
Current view: top level - usr/local/src/libreoffice/include/tools - gen.hxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 227 267 85.0 %
Date: 2013-07-09 Functions: 92 105 87.6 %
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             : #include <cstdlib>
      28             : 
      29             : class SvStream;
      30             : 
      31             : // Pair
      32             : 
      33             : class SAL_WARN_UNUSED Pair
      34             : {
      35             : public:
      36             :                         Pair();
      37             :                         Pair( long nA, long nB );
      38             : 
      39           1 :     long                A() const { return nA; }
      40           1 :     long                B() const { return nB; }
      41             : 
      42       16087 :     long&               A() { return nA; }
      43       16087 :     long&               B() { return nB; }
      44             : 
      45             :     bool                operator == ( const Pair& rPair ) const;
      46             :     bool                operator != ( const Pair& rPair ) const;
      47             : 
      48             :     TOOLS_DLLPUBLIC friend SvStream&    operator>>( SvStream& rIStream, Pair& rPair );
      49             :     TOOLS_DLLPUBLIC friend SvStream&    operator<<( SvStream& rOStream, const Pair& rPair );
      50             : 
      51             : protected:
      52             :     long                nA;
      53             :     long                nB;
      54             : };
      55             : 
      56    13068886 : inline Pair::Pair()
      57             : {
      58    13068886 :     nA = nB = 0;
      59    13068886 : }
      60             : 
      61    44562642 : inline Pair::Pair( long _nA, long _nB )
      62             : {
      63    44562642 :     Pair::nA = _nA;
      64    44562642 :     Pair::nB = _nB;
      65    44562642 : }
      66             : 
      67      278387 : inline bool Pair::operator == ( const Pair& rPair ) const
      68             : {
      69      278387 :     return ((nA == rPair.nA) && (nB == rPair.nB));
      70             : }
      71             : 
      72     2892925 : inline bool Pair::operator != ( const Pair& rPair ) const
      73             : {
      74     2892925 :     return ((nA != rPair.nA) || (nB != rPair.nB));
      75             : }
      76             : 
      77             : // Point
      78             : 
      79             : class SAL_WARN_UNUSED Point : public Pair
      80             : {
      81             : public:
      82             :                         Point();
      83             :                         Point( long nX, long nY );
      84             : 
      85    31139493 :     long                X() const { return nA; }
      86    17977366 :     long                Y() const { return nB; }
      87             : 
      88    35273257 :     long&               X() { return nA; }
      89    33411001 :     long&               Y() { return nB; }
      90             : 
      91             :     void                Move( long nHorzMove, long nVertMove );
      92             :     bool                IsAbove( const Point& rPoint ) const;
      93             :     bool                IsBelow( const Point& rPoint ) const;
      94             :     bool                IsLeft( const Point& rPoint ) const;
      95             :     bool                IsRight( const Point& rPoint ) const;
      96             : 
      97             :     Point&              operator += ( const Point& rPoint );
      98             :     Point&              operator -= ( const Point& rPoint );
      99             :     Point&              operator *= ( const long nVal );
     100             :     Point&              operator /= ( const long nVal );
     101             : 
     102             :     friend inline Point operator+( const Point &rVal1, const Point &rVal2 );
     103             :     friend inline Point operator-( const Point &rVal1, const Point &rVal2 );
     104             :     friend inline Point operator*( const Point &rVal1, const long nVal2 );
     105             :     friend inline Point operator/( const Point &rVal1, const long nVal2 );
     106             : 
     107     3217715 :     long                getX() const { return X(); }
     108     2749909 :     long                getY() const { return Y(); }
     109      254664 :     void                setX(long nX)  { X() = nX; }
     110      237580 :     void                setY(long nY)  { Y() = nY; }
     111             : };
     112             : 
     113     6131136 : inline Point::Point()
     114             : {
     115     6131136 : }
     116             : 
     117    32517229 : inline Point::Point( long nX, long nY ) : Pair( nX, nY )
     118             : {
     119    32517229 : }
     120             : 
     121         441 : inline void Point::Move( long nHorzMove, long nVertMove )
     122             : {
     123         441 :     nA += nHorzMove;
     124         441 :     nB += nVertMove;
     125         441 : }
     126             : 
     127             : inline bool Point::IsAbove( const Point& rPoint ) const
     128             : {
     129             :     return (nB > rPoint.nB);
     130             : }
     131             : 
     132             : inline bool Point::IsBelow( const Point& rPoint ) const
     133             : {
     134             :     return (nB < rPoint.nB);
     135             : }
     136             : 
     137             : inline bool Point::IsLeft( const Point& rPoint ) const
     138             : {
     139             :     return (nA < rPoint.nA);
     140             : }
     141             : 
     142             : inline bool Point::IsRight( const Point& rPoint ) const
     143             : {
     144             :     return (nA > rPoint.nA);
     145             : }
     146             : 
     147     1461012 : inline Point& Point::operator += ( const Point& rPoint )
     148             : {
     149     1461012 :     nA += rPoint.nA;
     150     1461012 :     nB += rPoint.nB;
     151     1461012 :     return *this;
     152             : }
     153             : 
     154      114868 : inline Point& Point::operator -= ( const Point& rPoint )
     155             : {
     156      114868 :     nA -= rPoint.nA;
     157      114868 :     nB -= rPoint.nB;
     158      114868 :     return *this;
     159             : }
     160             : 
     161           0 : inline Point& Point::operator *= ( const long nVal )
     162             : {
     163           0 :     nA *= nVal;
     164           0 :     nB *= nVal;
     165           0 :     return *this;
     166             : }
     167             : 
     168           0 : inline Point& Point::operator /= ( const long nVal )
     169             : {
     170           0 :     nA /= nVal;
     171           0 :     nB /= nVal;
     172           0 :     return *this;
     173             : }
     174             : 
     175     4091607 : inline Point operator+( const Point &rVal1, const Point &rVal2 )
     176             : {
     177     4091607 :     return Point( rVal1.nA+rVal2.nA, rVal1.nB+rVal2.nB );
     178             : }
     179             : 
     180     1252155 : inline Point operator-( const Point &rVal1, const Point &rVal2 )
     181             : {
     182     1252155 :     return Point( rVal1.nA-rVal2.nA, rVal1.nB-rVal2.nB );
     183             : }
     184             : 
     185           0 : inline Point operator*( const Point &rVal1, const long nVal2 )
     186             : {
     187           0 :     return Point( rVal1.nA*nVal2, rVal1.nB*nVal2 );
     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             : template< typename charT, typename traits >
     196             : inline std::basic_ostream<charT, traits> & operator <<(
     197             :     std::basic_ostream<charT, traits> & stream, const Point& point )
     198             : {
     199             :     return stream << point.X() << ',' << point.Y();
     200             : }
     201             : 
     202             : // Size
     203             : 
     204             : class SAL_WARN_UNUSED Size : public Pair
     205             : {
     206             : public:
     207             :                     Size();
     208             :                     Size( long nWidth, long nHeight );
     209             : 
     210    19189860 :     long            Width() const  { return nA; }
     211    15924220 :     long            Height() const { return nB; }
     212             : 
     213    61049929 :     long&           Width()  { return nA; }
     214    10353582 :     long&           Height() { return nB; }
     215             : 
     216     6704313 :     long            getWidth() const { return Width(); }
     217     5104078 :     long            getHeight() const { return Height(); }
     218      673354 :     void            setWidth(long nWidth)  { Width() = nWidth; }
     219      541863 :     void            setHeight(long nHeight)  { Height() = nHeight; }
     220             : };
     221             : 
     222     6933306 : inline Size::Size()
     223             : {
     224     6933306 : }
     225             : 
     226    11556913 : inline Size::Size( long nWidth, long nHeight ) :
     227    11556913 :                 Pair( nWidth, nHeight )
     228             : {
     229    11556913 : }
     230             : 
     231             : template< typename charT, typename traits >
     232             : inline std::basic_ostream<charT, traits> & operator <<(
     233             :     std::basic_ostream<charT, traits> & stream, const Size& size )
     234             : {
     235             :     return stream << size.Width() << 'x' << size.Height();
     236             : }
     237             : 
     238             : // Range
     239             : 
     240             : #define RANGE_MAX   LONG_MAX
     241             : 
     242             : class SAL_WARN_UNUSED Range : public Pair
     243             : {
     244             : public:
     245             :                     Range();
     246             :                     Range( long nMin, long nMax );
     247             : 
     248        1840 :     long            Min() const { return nA; }
     249        2124 :     long            Max() const { return nB; }
     250      451796 :     long            Len() const { return nB - nA + 1; }
     251             : 
     252      907355 :     long&           Min() { return nA; }
     253     1889136 :     long&           Max() { return nB; }
     254             : 
     255             :     bool            IsInside( long nIs ) const;
     256             : 
     257             :     void            Justify();
     258             : };
     259             : 
     260          70 : inline Range::Range()
     261             : {
     262          70 : }
     263             : 
     264      484304 : inline Range::Range( long nMin, long nMax ) : Pair( nMin, nMax )
     265             : {
     266      484304 : }
     267             : 
     268         533 : inline bool Range::IsInside( long nIs ) const
     269             : {
     270         533 :     return ((nA <= nIs) && (nIs <= nB ));
     271             : }
     272             : 
     273       15058 : inline void Range::Justify()
     274             : {
     275       15058 :     if ( nA > nB )
     276             :     {
     277          27 :         long nHelp = nA;
     278          27 :         nA = nB;
     279          27 :         nB = nHelp;
     280             :     }
     281       15058 : }
     282             : 
     283             : template< typename charT, typename traits >
     284             : inline std::basic_ostream<charT, traits> & operator <<(
     285             :     std::basic_ostream<charT, traits> & stream, const Range& range )
     286             : {
     287             :     return stream << range.Min() << '-' << range.Max();
     288             : }
     289             : 
     290             : // Selection
     291             : 
     292             : #define SELECTION_MIN   LONG_MIN
     293             : #define SELECTION_MAX   LONG_MAX
     294             : 
     295             : class SAL_WARN_UNUSED Selection : public Pair
     296             : {
     297             : public:
     298             :                     Selection();
     299             :                     Selection( long nPos );
     300             :                     Selection( long nMin, long nMax );
     301             : 
     302           0 :     long            Min() const { return nA; }
     303           0 :     long            Max() const { return nB; }
     304       13584 :     long            Len() const { return nB - nA; }
     305             : 
     306       18396 :     long&           Min() { return nA; }
     307       16133 :     long&           Max() { return nB; }
     308             : 
     309             :     bool            IsInside( long nIs ) const;
     310             : 
     311             :     void            Justify();
     312             : 
     313         269 :     bool            operator !() const { return !Len(); }
     314             : 
     315           0 :     long            getMin() const { return Min(); }
     316             :     long            getMax() const { return Max(); }
     317           0 :     void            setMin(long nMin)  { Min() = nMin; }
     318           0 :     void            setMax(long nMax)  { Max() = nMax; }
     319             : };
     320             : 
     321        4374 : inline Selection::Selection()
     322             : {
     323        4374 : }
     324             : 
     325           0 : inline Selection::Selection( long nPos ) : Pair( nPos, nPos )
     326             : {
     327           0 : }
     328             : 
     329        4192 : inline Selection::Selection( long nMin, long nMax ) :
     330        4192 :            Pair( nMin, nMax )
     331             : {
     332        4192 : }
     333             : 
     334           0 : inline bool Selection::IsInside( long nIs ) const
     335             : {
     336           0 :     return ((nA <= nIs) && (nIs < nB ));
     337             : }
     338             : 
     339        3193 : inline void Selection::Justify()
     340             : {
     341        3193 :     if ( nA > nB )
     342             :     {
     343           0 :         long nHelp = nA;
     344           0 :         nA = nB;
     345           0 :         nB = nHelp;
     346             :     }
     347        3193 : }
     348             : 
     349             : template< typename charT, typename traits >
     350             : inline std::basic_ostream<charT, traits> & operator <<(
     351             :     std::basic_ostream<charT, traits> & stream, const Selection& selection )
     352             : {
     353             :     return stream << selection.Min() << '-' << selection.Max();
     354             : }
     355             : // Rectangle
     356             : 
     357             : #define RECT_EMPTY  ((short)-32767)
     358             : 
     359             : class TOOLS_DLLPUBLIC SAL_WARN_UNUSED Rectangle
     360             : {
     361             : public:
     362             :                         Rectangle();
     363             :                         Rectangle( const Point& rLT, const Point& rRB );
     364             :                         Rectangle( long nLeft, long nTop,
     365             :                                    long nRight, long nBottom );
     366             :                         Rectangle( const Point& rLT, const Size& rSize );
     367             : 
     368     3884760 :     long                Left() const    { return nLeft;   }
     369     3537333 :     long                Right() const   { return nRight;  }
     370     3880179 :     long                Top() const     { return nTop;    }
     371     3519199 :     long                Bottom() const  { return nBottom; }
     372             : 
     373     8265786 :     long&               Left()          { return nLeft;   }
     374     2878919 :     long&               Right()         { return nRight;  }
     375     9340141 :     long&               Top()           { return nTop;    }
     376     2251143 :     long&               Bottom()        { return nBottom; }
     377             : 
     378             :     inline Point        TopLeft() const;
     379             :     inline Point        TopRight() const;
     380             :     inline Point        TopCenter() const;
     381             :     inline Point        BottomLeft() const;
     382             :     inline Point        BottomRight() const;
     383             :     inline Point        BottomCenter() const;
     384             :     inline Point        LeftCenter() const;
     385             :     inline Point        RightCenter() const;
     386             :     inline Point        Center() const;
     387             : 
     388             :     inline void         Move( long nHorzMove, long nVertMove );
     389             :     inline void         Transpose();
     390             :     inline void         SetPos( const Point& rPoint );
     391             :     void                SetSize( const Size& rSize );
     392             :     inline Size         GetSize() const;
     393             : 
     394             :     inline long         GetWidth() const;
     395             :     inline long         GetHeight() const;
     396             : 
     397             :     Rectangle&          Union( const Rectangle& rRect );
     398             :     Rectangle&          Intersection( const Rectangle& rRect );
     399             :     inline Rectangle    GetUnion( const Rectangle& rRect ) const;
     400             :     inline Rectangle    GetIntersection( const Rectangle& rRect ) const;
     401             : 
     402             :     void                Justify();
     403             : 
     404             :     bool                IsInside( const Point& rPOINT ) const;
     405             :     bool                IsInside( const Rectangle& rRect ) const;
     406             :     bool                IsOver( const Rectangle& rRect ) const;
     407             : 
     408      161129 :     void                SetEmpty() { nRight = nBottom = RECT_EMPTY; }
     409             :     inline bool         IsEmpty() const;
     410             : 
     411             :     inline bool         operator == ( const Rectangle& rRect ) const;
     412             :     inline bool         operator != ( const Rectangle& rRect ) const;
     413             : 
     414             :     inline Rectangle&   operator += ( const Point& rPt );
     415             :     inline Rectangle&   operator -= ( const Point& rPt );
     416             : 
     417             :     friend inline Rectangle operator + ( const Rectangle& rRect, const Point& rPt );
     418             :     friend inline Rectangle operator - ( const Rectangle& rRect, const Point& rPt );
     419             : 
     420             :     TOOLS_DLLPUBLIC friend SvStream&    operator>>( SvStream& rIStream, Rectangle& rRect );
     421             :     TOOLS_DLLPUBLIC friend SvStream&    operator<<( SvStream& rOStream, const Rectangle& rRect );
     422             : 
     423             :     // ONE
     424         664 :     long                getX() const { return nLeft; }
     425        1289 :     long                getY() const { return nTop; }
     426       59251 :     long                getWidth() const { return nRight - nLeft; }
     427       57243 :     long                getHeight() const { return nBottom - nTop; }
     428        6505 :     void                setX( long n ) { nRight += n-nLeft; nLeft = n; }
     429        6273 :     void                setY( long n ) { nBottom += n-nTop; nTop = n; }
     430       63900 :     void                setWidth( long n ) { nRight = nLeft + n; }
     431       67354 :     void                setHeight( long n ) { nBottom = nTop + n; }
     432             : 
     433             : private:
     434             :     long                nLeft;
     435             :     long                nTop;
     436             :     long                nRight;
     437             :     long                nBottom;
     438             : };
     439             : 
     440     4609685 : inline Rectangle::Rectangle()
     441             : {
     442     4609685 :     nLeft = nTop = 0;
     443     4609685 :     nRight = nBottom = RECT_EMPTY;
     444     4609685 : }
     445             : 
     446      800634 : inline Rectangle::Rectangle( const Point& rLT, const Point& rRB )
     447             : {
     448      800634 :     nLeft   = rLT.X();
     449      800634 :     nTop    = rLT.Y();
     450      800634 :     nRight  = rRB.X();
     451      800634 :     nBottom = rRB.Y();
     452      800634 : }
     453             : 
     454     1952314 : inline Rectangle::Rectangle( long _nLeft,  long _nTop,
     455             :                              long _nRight, long _nBottom )
     456             : {
     457     1952314 :     nLeft   = _nLeft;
     458     1952314 :     nTop    = _nTop;
     459     1952314 :     nRight  = _nRight;
     460     1952314 :     nBottom = _nBottom;
     461     1952314 : }
     462             : 
     463     2520577 : inline Rectangle::Rectangle( const Point& rLT, const Size& rSize )
     464             : {
     465     2520577 :     nLeft   = rLT.X();
     466     2520577 :     nTop    = rLT.Y();
     467     2520577 :     nRight  = rSize.Width()  ? nLeft+rSize.Width()-1 : RECT_EMPTY;
     468     2520577 :     nBottom = rSize.Height() ? nTop+rSize.Height()-1 : RECT_EMPTY;
     469     2520577 : }
     470             : 
     471     7394183 : inline bool Rectangle::IsEmpty() const
     472             : {
     473     7394183 :     return ((nRight == RECT_EMPTY) || (nBottom == RECT_EMPTY));
     474             : }
     475             : 
     476     2154122 : inline Point Rectangle::TopLeft() const
     477             : {
     478     2154122 :     return Point( nLeft, nTop );
     479             : }
     480             : 
     481     1619997 : inline Point Rectangle::TopRight() const
     482             : {
     483     1619997 :     return Point( (nRight == RECT_EMPTY) ? nLeft : nRight, nTop );
     484             : }
     485             : 
     486      199446 : inline Point Rectangle::BottomLeft() const
     487             : {
     488      199446 :     return Point( nLeft, (nBottom == RECT_EMPTY) ? nTop : nBottom );
     489             : }
     490             : 
     491      214395 : inline Point Rectangle::BottomRight() const
     492             : {
     493      214395 :     return Point( (nRight  == RECT_EMPTY) ? nLeft : nRight,
     494      428790 :                   (nBottom == RECT_EMPTY) ? nTop  : nBottom );
     495             : }
     496             : 
     497         101 : inline Point Rectangle::TopCenter() const
     498             : {
     499         101 :     if ( IsEmpty() )
     500           0 :         return Point( nLeft, nTop );
     501             :     else
     502         202 :         return Point( std::min( nLeft, nRight ) + std::abs( (nRight - nLeft)/2 ),
     503         303 :                       std::min( nTop,  nBottom) );
     504             : }
     505             : 
     506         105 : inline Point Rectangle::BottomCenter() const
     507             : {
     508         105 :     if ( IsEmpty() )
     509           0 :         return Point( nLeft, nTop );
     510             :     else
     511         210 :         return Point( std::min( nLeft, nRight ) + std::abs( (nRight - nLeft)/2 ),
     512         315 :                       std::max( nTop,  nBottom) );
     513             : }
     514             : 
     515         101 : inline Point Rectangle::LeftCenter() const
     516             : {
     517         101 :     if ( IsEmpty() )
     518           0 :         return Point( nLeft, nTop );
     519             :     else
     520         101 :         return Point( std::min( nLeft, nRight ), nTop + (nBottom - nTop)/2 );
     521             : }
     522             : 
     523         101 : inline Point Rectangle::RightCenter() const
     524             : {
     525         101 :     if ( IsEmpty() )
     526           0 :         return Point( nLeft, nTop );
     527             :     else
     528         101 :         return Point( std::max( nLeft, nRight ), nTop + (nBottom - nTop)/2 );
     529             : }
     530             : 
     531      160371 : inline Point Rectangle::Center() const
     532             : {
     533      160371 :     if ( IsEmpty() )
     534       37021 :         return Point( nLeft, nTop );
     535             :     else
     536      123350 :         return Point( nLeft+(nRight-nLeft)/2 , nTop+(nBottom-nTop)/2 );
     537             : }
     538             : 
     539      342862 : inline void Rectangle::Move( long nHorzMove, long nVertMove )
     540             : {
     541      342862 :     nLeft += nHorzMove;
     542      342862 :     nTop  += nVertMove;
     543      342862 :     if ( nRight != RECT_EMPTY )
     544      260407 :         nRight += nHorzMove;
     545      342862 :     if ( nBottom != RECT_EMPTY )
     546      258507 :         nBottom += nVertMove;
     547      342862 : }
     548             : 
     549           0 : void Rectangle::Transpose()
     550             : {
     551           0 :     if ( !IsEmpty() )
     552             :     {
     553           0 :         long swap( nLeft );
     554           0 :         nLeft = nTop;
     555           0 :         nTop = swap;
     556             : 
     557           0 :         swap = nRight;
     558           0 :         nRight = nBottom;
     559           0 :         nBottom = swap;
     560             :     }
     561           0 : }
     562             : 
     563        7441 : inline void Rectangle::SetPos( const Point& rPoint )
     564             : {
     565        7441 :     if ( nRight != RECT_EMPTY )
     566        2660 :         nRight += rPoint.X() - nLeft;
     567        7441 :     if ( nBottom != RECT_EMPTY )
     568        4808 :         nBottom += rPoint.Y() - nTop;
     569        7441 :     nLeft = rPoint.X();
     570        7441 :     nTop  = rPoint.Y();
     571        7441 : }
     572             : 
     573     1931996 : inline long Rectangle::GetWidth() const
     574             : {
     575             :     long n;
     576     1931996 :     if ( nRight == RECT_EMPTY )
     577       46376 :         n = 0;
     578             :     else
     579             :     {
     580     1885620 :         n = nRight - nLeft;
     581     1885620 :         if( n < 0 )
     582        1606 :             n--;
     583             :         else
     584     1884014 :             n++;
     585             :     }
     586             : 
     587     1931996 :     return n;
     588             : }
     589             : 
     590     2427101 : inline long Rectangle::GetHeight() const
     591             : {
     592             :     long n;
     593     2427101 :     if ( nBottom == RECT_EMPTY )
     594       56264 :         n = 0;
     595             :     else
     596             :     {
     597     2370837 :         n = nBottom - nTop;
     598     2370837 :         if ( n < 0 )
     599        1730 :             n--;
     600             :         else
     601     2369107 :             n++;
     602             :     }
     603             : 
     604     2427101 :     return n;
     605             : }
     606             : 
     607      504481 : inline Size Rectangle::GetSize() const
     608             : {
     609      504481 :     return Size( GetWidth(), GetHeight() );
     610             : }
     611             : 
     612           0 : inline Rectangle Rectangle::GetUnion( const Rectangle& rRect ) const
     613             : {
     614           0 :     Rectangle aTmpRect( *this );
     615           0 :     return aTmpRect.Union( rRect );
     616             : }
     617             : 
     618      378032 : inline Rectangle Rectangle::GetIntersection( const Rectangle& rRect ) const
     619             : {
     620      378032 :     Rectangle aTmpRect( *this );
     621      378032 :     return aTmpRect.Intersection( rRect );
     622             : }
     623             : 
     624       10072 : inline bool Rectangle::operator == ( const Rectangle& rRect ) const
     625             : {
     626       18334 :     return ((nLeft   == rRect.nLeft   ) &&
     627       16131 :             (nTop    == rRect.nTop    ) &&
     628       24025 :             (nRight  == rRect.nRight  ) &&
     629       16156 :             (nBottom == rRect.nBottom ));
     630             : }
     631             : 
     632      108584 : inline bool Rectangle::operator != ( const Rectangle& rRect ) const
     633             : {
     634      172755 :     return ((nLeft   != rRect.nLeft   ) ||
     635      127547 :             (nTop    != rRect.nTop    ) ||
     636      231055 :             (nRight  != rRect.nRight  ) ||
     637      167679 :             (nBottom != rRect.nBottom ));
     638             : }
     639             : 
     640      277263 : inline Rectangle& Rectangle::operator +=( const Point& rPt )
     641             : {
     642      277263 :     nLeft += rPt.X();
     643      277263 :     nTop  += rPt.Y();
     644      277263 :     if ( nRight != RECT_EMPTY )
     645      276721 :         nRight += rPt.X();
     646      277263 :     if ( nBottom != RECT_EMPTY )
     647      264718 :         nBottom += rPt.Y();
     648      277263 :     return *this;
     649             : }
     650             : 
     651       14205 : inline Rectangle& Rectangle::operator -= ( const Point& rPt )
     652             : {
     653       14205 :     nLeft -= rPt.X();
     654       14205 :     nTop  -= rPt.Y();
     655       14205 :     if ( nRight != RECT_EMPTY )
     656       14205 :         nRight -= rPt.X();
     657       14205 :     if ( nBottom != RECT_EMPTY )
     658       14205 :         nBottom -= rPt.Y();
     659       14205 :     return *this;
     660             : }
     661             : 
     662        5483 : inline Rectangle operator + ( const Rectangle& rRect, const Point& rPt )
     663             : {
     664       10966 :     Rectangle aRect( rRect.nLeft  + rPt.X(), rRect.nTop    + rPt.Y(),
     665       10966 :                      (rRect.nRight  == RECT_EMPTY) ? RECT_EMPTY : rRect.nRight + rPt.X(),
     666       27415 :                      (rRect.nBottom == RECT_EMPTY) ? RECT_EMPTY : rRect.nBottom + rPt.Y() );
     667        5483 :     return aRect;
     668             : }
     669             : 
     670        1165 : inline Rectangle operator - ( const Rectangle& rRect, const Point& rPt )
     671             : {
     672        1165 :     Rectangle aRect( rRect.nLeft - rPt.X(),
     673        1165 :                      rRect.nTop - rPt.Y(),
     674        2330 :                      (rRect.nRight  == RECT_EMPTY) ? RECT_EMPTY : rRect.nRight - rPt.X(),
     675        5825 :                      (rRect.nBottom == RECT_EMPTY) ? RECT_EMPTY : rRect.nBottom - rPt.Y() );
     676        1165 :     return aRect;
     677             : }
     678             : 
     679             : template< typename charT, typename traits >
     680             : inline std::basic_ostream<charT, traits> & operator <<(
     681             :     std::basic_ostream<charT, traits> & stream, const Rectangle& rectangle )
     682             : {
     683             :     if (rectangle.IsEmpty())
     684             :         return stream << "EMPTY";
     685             :     else
     686             :         return stream << rectangle.getWidth() << 'x' << rectangle.getHeight()
     687             :                       << "@(" << rectangle.getX() << ',' << rectangle.getY() << ")";
     688             : }
     689             : 
     690             : #endif
     691             : 
     692             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10