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_DOUBLE_INTERVAL_H 00011 #define QWT_DOUBLE_INTERVAL_H 00012 00013 #include "qwt_global.h" 00014 00021 class QWT_EXPORT QwtDoubleInterval 00022 { 00023 public: 00024 inline QwtDoubleInterval(); 00025 inline QwtDoubleInterval(double minValue, double maxValue); 00026 00027 inline void setInterval(double minValue, double maxValue); 00028 00029 QwtDoubleInterval normalized() const; 00030 QwtDoubleInterval inverted() const; 00031 QwtDoubleInterval limited(double minValue, double maxValue) const; 00032 00033 inline int operator==(const QwtDoubleInterval &) const; 00034 inline int operator!=(const QwtDoubleInterval &) const; 00035 00036 inline double minValue() const; 00037 inline double maxValue() const; 00038 00039 inline double width() const; 00040 00041 inline void setMinValue(double); 00042 inline void setMaxValue(double); 00043 00044 bool contains(double value) const; 00045 00046 bool intersects(const QwtDoubleInterval &) const; 00047 QwtDoubleInterval intersect(const QwtDoubleInterval &) const; 00048 QwtDoubleInterval unite(const QwtDoubleInterval &) const; 00049 00050 inline QwtDoubleInterval operator|(const QwtDoubleInterval &) const; 00051 inline QwtDoubleInterval operator&(const QwtDoubleInterval &) const; 00052 00053 QwtDoubleInterval &operator|=(const QwtDoubleInterval &); 00054 QwtDoubleInterval &operator&=(const QwtDoubleInterval &); 00055 00056 QwtDoubleInterval extend(double value) const; 00057 inline QwtDoubleInterval operator|(double) const; 00058 QwtDoubleInterval &operator|=(double); 00059 00060 inline bool isValid() const; 00061 inline bool isNull() const; 00062 inline void invalidate(); 00063 00064 QwtDoubleInterval symmetrize(double value) const; 00065 00066 private: 00067 double d_minValue; 00068 double d_maxValue; 00069 }; 00070 00077 inline QwtDoubleInterval::QwtDoubleInterval(): 00078 d_minValue(0.0), 00079 d_maxValue(-1.0) 00080 { 00081 } 00082 00089 inline QwtDoubleInterval::QwtDoubleInterval(double minValue, double maxValue): 00090 d_minValue(minValue), 00091 d_maxValue(maxValue) 00092 { 00093 } 00094 00101 inline void QwtDoubleInterval::setInterval(double minValue, double maxValue) 00102 { 00103 d_minValue = minValue; 00104 d_maxValue = maxValue; 00105 } 00106 00112 inline void QwtDoubleInterval::setMinValue(double minValue) 00113 { 00114 d_minValue = minValue; 00115 } 00116 00122 inline void QwtDoubleInterval::setMaxValue(double maxValue) 00123 { 00124 d_maxValue = maxValue; 00125 } 00126 00128 inline double QwtDoubleInterval::minValue() const 00129 { 00130 return d_minValue; 00131 } 00132 00134 inline double QwtDoubleInterval::maxValue() const 00135 { 00136 return d_maxValue; 00137 } 00138 00146 inline double QwtDoubleInterval::width() const 00147 { 00148 return isValid() ? (d_maxValue - d_minValue) : 0.0; 00149 } 00150 00155 inline QwtDoubleInterval QwtDoubleInterval::operator&( 00156 const QwtDoubleInterval &interval ) const 00157 { 00158 return intersect(interval); 00159 } 00160 00165 inline QwtDoubleInterval QwtDoubleInterval::operator|( 00166 const QwtDoubleInterval &interval) const 00167 { 00168 return unite(interval); 00169 } 00170 00172 inline int QwtDoubleInterval::operator==(const QwtDoubleInterval &other) const 00173 { 00174 return (d_minValue == other.d_minValue) && 00175 (d_maxValue == other.d_maxValue); 00176 } 00177 00179 inline int QwtDoubleInterval::operator!=(const QwtDoubleInterval &other) const 00180 { 00181 return (!(*this == other)); 00182 } 00183 00188 inline QwtDoubleInterval QwtDoubleInterval::operator|(double value) const 00189 { 00190 return extend(value); 00191 } 00192 00194 inline bool QwtDoubleInterval::isNull() const 00195 { 00196 return d_minValue >= d_maxValue; 00197 } 00198 00200 inline bool QwtDoubleInterval::isValid() const 00201 { 00202 return d_minValue <= d_maxValue; 00203 } 00204 00211 inline void QwtDoubleInterval::invalidate() 00212 { 00213 d_minValue = 0.0; 00214 d_maxValue = -1.0; 00215 } 00216 00217 #endif