qwt_interval.h
Go to the documentation of this file.
00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
00002  * Qwt Widget Library
00003  * Copyright (C) 1997   Josef Wilgen
00004  * Copyright (C) 2002   Uwe Rathmann
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the Qwt License, Version 1.0
00008  *****************************************************************************/
00009 
00010 #ifndef QWT_INTERVAL_H
00011 #define QWT_INTERVAL_H
00012 
00013 #include "qwt_global.h"
00014 #include <qmetatype.h>
00015 
00016 #ifndef QT_NO_DEBUG_STREAM
00017 #include <qdebug.h>
00018 #endif
00019 
00026 class QWT_EXPORT QwtInterval
00027 {
00028 public:
00033     enum BorderFlag
00034     {
00036         IncludeBorders = 0x00,
00037 
00039         ExcludeMinimum = 0x01,
00040 
00042         ExcludeMaximum = 0x02,
00043 
00045         ExcludeBorders = ExcludeMinimum | ExcludeMaximum
00046     };
00047 
00049     typedef QFlags<BorderFlag> BorderFlags;
00050 
00051     QwtInterval();
00052     QwtInterval( double minValue, double maxValue,
00053         BorderFlags = IncludeBorders );
00054 
00055     void setInterval( double minValue, double maxValue,
00056         BorderFlags = IncludeBorders );
00057 
00058     QwtInterval normalized() const;
00059     QwtInterval inverted() const;
00060     QwtInterval limited( double minValue, double maxValue ) const;
00061 
00062     bool operator==( const QwtInterval & ) const;
00063     bool operator!=( const QwtInterval & ) const;
00064 
00065     void setBorderFlags( BorderFlags );
00066     BorderFlags borderFlags() const;
00067 
00068     double minValue() const;
00069     double maxValue() const;
00070 
00071     double width() const;
00072     long double widthL() const;
00073 
00074     void setMinValue( double );
00075     void setMaxValue( double );
00076 
00077     bool contains( double value ) const;
00078 
00079     bool intersects( const QwtInterval & ) const;
00080     QwtInterval intersect( const QwtInterval & ) const;
00081     QwtInterval unite( const QwtInterval & ) const;
00082 
00083     QwtInterval operator|( const QwtInterval & ) const;
00084     QwtInterval operator&( const QwtInterval & ) const;
00085 
00086     QwtInterval &operator|=( const QwtInterval & );
00087     QwtInterval &operator&=( const QwtInterval & );
00088 
00089     QwtInterval extend( double value ) const;
00090     QwtInterval operator|( double ) const;
00091     QwtInterval &operator|=( double );
00092 
00093     bool isValid() const;
00094     bool isNull() const;
00095     void invalidate();
00096 
00097     QwtInterval symmetrize( double value ) const;
00098 
00099 private:
00100     double d_minValue;
00101     double d_maxValue;
00102     BorderFlags d_borderFlags;
00103 };
00104 
00105 Q_DECLARE_TYPEINFO(QwtInterval, Q_MOVABLE_TYPE);
00106 
00113 inline QwtInterval::QwtInterval():
00114     d_minValue( 0.0 ),
00115     d_maxValue( -1.0 ),
00116     d_borderFlags( IncludeBorders )
00117 {
00118 }
00119 
00129 inline QwtInterval::QwtInterval(
00130         double minValue, double maxValue, BorderFlags borderFlags ):
00131     d_minValue( minValue ),
00132     d_maxValue( maxValue ),
00133     d_borderFlags( borderFlags )
00134 {
00135 }
00136 
00144 inline void QwtInterval::setInterval(
00145     double minValue, double maxValue, BorderFlags borderFlags )
00146 {
00147     d_minValue = minValue;
00148     d_maxValue = maxValue;
00149     d_borderFlags = borderFlags;
00150 }
00151 
00158 inline void QwtInterval::setBorderFlags( BorderFlags borderFlags )
00159 {
00160     d_borderFlags = borderFlags;
00161 }
00162 
00167 inline QwtInterval::BorderFlags QwtInterval::borderFlags() const
00168 {
00169     return d_borderFlags;
00170 }
00171 
00177 inline void QwtInterval::setMinValue( double minValue )
00178 {
00179     d_minValue = minValue;
00180 }
00181 
00187 inline void QwtInterval::setMaxValue( double maxValue )
00188 {
00189     d_maxValue = maxValue;
00190 }
00191 
00193 inline double QwtInterval::minValue() const
00194 {
00195     return d_minValue;
00196 }
00197 
00199 inline double QwtInterval::maxValue() const
00200 {
00201     return d_maxValue;
00202 }
00203 
00211 inline bool QwtInterval::isValid() const
00212 {
00213     if ( ( d_borderFlags & ExcludeBorders ) == 0 )
00214         return d_minValue <= d_maxValue;
00215     else
00216         return d_minValue < d_maxValue;
00217 }
00218 
00228 inline double QwtInterval::width() const
00229 {
00230     return isValid() ? ( d_maxValue - d_minValue ) : 0.0;
00231 }
00232 
00242 inline long double QwtInterval::widthL() const
00243 {
00244     if ( !isValid() )
00245         return 0.0;
00246 
00247     return static_cast<long double>( d_maxValue )
00248         - static_cast<long double>( d_minValue );
00249 }
00250 
00259 inline QwtInterval QwtInterval::operator&(
00260     const QwtInterval &other ) const
00261 {
00262     return intersect( other );
00263 }
00264 
00273 inline QwtInterval QwtInterval::operator|(
00274     const QwtInterval &other ) const
00275 {
00276     return unite( other );
00277 }
00278 
00285 inline bool QwtInterval::operator==( const QwtInterval &other ) const
00286 {
00287     return ( d_minValue == other.d_minValue ) &&
00288            ( d_maxValue == other.d_maxValue ) &&
00289            ( d_borderFlags == other.d_borderFlags );
00290 }
00297 inline bool QwtInterval::operator!=( const QwtInterval &other ) const
00298 {
00299     return ( !( *this == other ) );
00300 }
00301 
00309 inline QwtInterval QwtInterval::operator|( double value ) const
00310 {
00311     return extend( value );
00312 }
00313 
00315 inline bool QwtInterval::isNull() const
00316 {
00317     return isValid() && d_minValue >= d_maxValue;
00318 }
00319 
00326 inline void QwtInterval::invalidate()
00327 {
00328     d_minValue = 0.0;
00329     d_maxValue = -1.0;
00330 }
00331 
00332 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtInterval::BorderFlags )
00333 Q_DECLARE_METATYPE( QwtInterval )
00334 
00335 #ifndef QT_NO_DEBUG_STREAM
00336 QWT_EXPORT QDebug operator<<( QDebug, const QwtInterval & );
00337 #endif
00338 
00339 #endif


plotjuggler
Author(s): Davide Faconti
autogenerated on Wed Jul 3 2019 19:28:04