qwt_double_interval.cpp

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 #include <qglobal.h>
00011 #if QT_VERSION >= 0x040000
00012 #include <qalgorithms.h>
00013 #else
00014 #include <qtl.h>
00015 #endif
00016 
00017 #include "qwt_math.h"
00018 #include "qwt_double_interval.h"
00019 
00028 QwtDoubleInterval QwtDoubleInterval::normalized() const
00029 {
00030     if ( !isValid() )
00031     {
00032         return QwtDoubleInterval(d_maxValue, d_minValue);
00033     }
00034     else
00035         return *this;
00036 }
00037 
00043 QwtDoubleInterval QwtDoubleInterval::inverted() const
00044 {
00045     return QwtDoubleInterval(d_maxValue, d_minValue);
00046 }
00047 
00054 bool QwtDoubleInterval::contains(double value) const
00055 {
00056     if ( !isValid() )
00057         return false;
00058 
00059     return (value >= d_minValue) && (value <= d_maxValue);
00060 }
00061 
00063 QwtDoubleInterval QwtDoubleInterval::unite(
00064     const QwtDoubleInterval &interval) const
00065 {
00066     if ( !isValid() )
00067     {
00068         if ( !interval.isValid() )
00069             return QwtDoubleInterval();
00070         else
00071             return interval;
00072     }
00073     if ( !interval.isValid() )
00074         return *this;
00075 
00076     const double minValue = qwtMin(d_minValue, interval.minValue());
00077     const double maxValue = qwtMax(d_maxValue, interval.maxValue());
00078 
00079     return QwtDoubleInterval(minValue, maxValue);
00080 }
00081 
00083 QwtDoubleInterval QwtDoubleInterval::intersect(
00084     const QwtDoubleInterval &interval) const
00085 {
00086     if ( !interval.isValid() || !isValid() )
00087         return QwtDoubleInterval();
00088 
00089     QwtDoubleInterval i1 = *this;
00090     QwtDoubleInterval i2 = interval;
00091 
00092     if ( i1.minValue() > i2.minValue() )
00093         qSwap(i1, i2);
00094 
00095     if ( i1.maxValue() < i2.minValue() )
00096         return QwtDoubleInterval();
00097 
00098     return QwtDoubleInterval(i2.minValue(), 
00099                 qwtMin(i1.maxValue(), i2.maxValue()));
00100 }
00101 
00102 QwtDoubleInterval& QwtDoubleInterval::operator|=(
00103     const QwtDoubleInterval &interval)
00104 {
00105     *this = *this | interval;
00106     return *this;
00107 }
00108 
00109 QwtDoubleInterval& QwtDoubleInterval::operator&=(
00110     const QwtDoubleInterval &interval) 
00111 {
00112     *this = *this & interval;
00113     return *this;
00114 }
00115 
00119 bool QwtDoubleInterval::intersects(const QwtDoubleInterval &interval) const
00120 {
00121     if ( !isValid() || !interval.isValid() )
00122         return false;
00123 
00124     QwtDoubleInterval i1 = *this;
00125     QwtDoubleInterval i2 = interval;
00126 
00127     if ( i1.minValue() > i2.minValue() )
00128         qSwap(i1, i2);
00129 
00130     return i1.maxValue() >= i2.minValue();
00131 }
00132 
00140 QwtDoubleInterval QwtDoubleInterval::symmetrize(double value) const
00141 {
00142     if ( !isValid() )
00143         return *this;
00144 
00145     const double delta =
00146         qwtMax(qwtAbs(value - d_maxValue), qwtAbs(value - d_minValue));
00147 
00148     return QwtDoubleInterval(value - delta, value + delta);
00149 }
00150 
00159 QwtDoubleInterval QwtDoubleInterval::limited(
00160     double lBound, double hBound) const
00161 {
00162     if ( !isValid() || lBound > hBound )
00163         return QwtDoubleInterval();
00164 
00165     double minValue = qwtMax(d_minValue, lBound);
00166     minValue = qwtMin(minValue, hBound);
00167 
00168     double maxValue = qwtMax(d_maxValue, lBound);
00169     maxValue = qwtMin(maxValue, hBound);
00170 
00171     return QwtDoubleInterval(minValue, maxValue);
00172 }
00173 
00185 QwtDoubleInterval QwtDoubleInterval::extend(double value) const
00186 {
00187     if ( !isValid() )
00188         return *this;
00189 
00190     return QwtDoubleInterval(
00191         qwtMin(value, d_minValue), qwtMax(value, d_maxValue) );
00192 }
00193 
00194 QwtDoubleInterval& QwtDoubleInterval::operator|=(double value)
00195 {
00196     *this = *this | value;
00197     return *this;
00198 }

Generated on Mon Feb 26 21:22:36 2007 for Qwt User's Guide by  doxygen 1.4.6