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 // vim: expandtab 00011 00012 #ifndef QWT_SERIES_DATA_H 00013 #define QWT_SERIES_DATA_H 1 00014 00015 #include "qwt_global.h" 00016 #include "qwt_array.h" 00017 #include "qwt_double_rect.h" 00018 #include "qwt_double_interval.h" 00019 00021 class QWT_EXPORT QwtIntervalSample 00022 { 00023 public: 00024 QwtIntervalSample(); 00025 QwtIntervalSample(double, const QwtDoubleInterval &); 00026 00027 bool operator==(const QwtIntervalSample &) const; 00028 00029 double value; 00030 QwtDoubleInterval interval; 00031 }; 00032 00033 inline QwtIntervalSample::QwtIntervalSample(): 00034 value(0.0) 00035 { 00036 } 00037 00038 inline QwtIntervalSample::QwtIntervalSample( 00039 double v, const QwtDoubleInterval &intv): 00040 value(v), 00041 interval(intv) 00042 { 00043 } 00044 00045 inline bool QwtIntervalSample::operator==(const QwtIntervalSample &other) const 00046 { 00047 return value == other.value && interval == other.interval; 00048 } 00049 00051 class QWT_EXPORT QwtSetSample 00052 { 00053 public: 00054 QwtSetSample(); 00055 bool operator==(const QwtSetSample &other) const; 00056 00057 double value; 00058 QwtArray<double> set; 00059 }; 00060 00061 inline QwtSetSample::QwtSetSample(): 00062 value(0.0) 00063 { 00064 } 00065 00066 inline bool QwtSetSample::operator==(const QwtSetSample &other) const 00067 { 00068 return value == other.value && set == other.set; 00069 } 00070 00079 template <typename T> 00080 class QwtSeriesData 00081 { 00082 public: 00083 virtual ~QwtSeriesData() {} 00084 00093 virtual QwtSeriesData *copy() const = 0; 00094 00096 virtual size_t size() const = 0; 00097 00103 virtual T sample(size_t i) const = 0; 00104 00115 virtual QwtDoubleRect boundingRect() const = 0; 00116 00126 virtual void setRectOfInterest(const QwtDoubleRect &) {}; 00127 00128 private: 00132 QwtSeriesData<T> &operator=(const QwtSeriesData<T> &); 00133 }; 00134 00141 template <typename T> 00142 class QwtArraySeriesData: public QwtSeriesData<T> 00143 { 00144 public: 00145 QwtArraySeriesData(); 00146 QwtArraySeriesData(const QwtArray<T> &); 00147 00148 void setData(const QwtArray<T> &); 00149 const QwtArray<T> data() const; 00150 00151 virtual size_t size() const; 00152 virtual T sample(size_t) const; 00153 00154 protected: 00155 QwtArray<T> d_samples; 00156 }; 00157 00159 template <typename T> 00160 QwtArraySeriesData<T>::QwtArraySeriesData() 00161 { 00162 } 00163 00168 template <typename T> 00169 QwtArraySeriesData<T>::QwtArraySeriesData(const QwtArray<T> &samples): 00170 d_samples(samples) 00171 { 00172 } 00173 00178 template <typename T> 00179 void QwtArraySeriesData<T>::setData(const QwtArray<T> &samples) 00180 { 00181 d_samples = samples; 00182 } 00183 00185 template <typename T> 00186 const QwtArray<T> QwtArraySeriesData<T>::data() const 00187 { 00188 return d_samples; 00189 } 00190 00192 template <typename T> 00193 size_t QwtArraySeriesData<T>::size() const 00194 { 00195 return d_samples.size(); 00196 } 00197 00203 template <typename T> 00204 T QwtArraySeriesData<T>::sample(size_t i) const 00205 { 00206 return d_samples[i]; 00207 } 00208 00210 class QWT_EXPORT QwtPointSeriesData: public QwtArraySeriesData<QwtDoublePoint> 00211 { 00212 public: 00213 QwtPointSeriesData( 00214 const QwtArray<QwtDoublePoint> & = QwtArray<QwtDoublePoint>()); 00215 00216 virtual QwtSeriesData<QwtDoublePoint> *copy() const; 00217 virtual QwtDoubleRect boundingRect() const; 00218 }; 00219 00221 class QWT_EXPORT QwtIntervalSeriesData: public QwtArraySeriesData<QwtIntervalSample> 00222 { 00223 public: 00224 QwtIntervalSeriesData( 00225 const QwtArray<QwtIntervalSample> & = QwtArray<QwtIntervalSample>()); 00226 00227 virtual QwtSeriesData<QwtIntervalSample> *copy() const; 00228 virtual QwtDoubleRect boundingRect() const; 00229 }; 00230 00232 class QWT_EXPORT QwtSetSeriesData: public QwtArraySeriesData<QwtSetSample> 00233 { 00234 public: 00235 QwtSetSeriesData( 00236 const QwtArray<QwtSetSample> & = QwtArray<QwtSetSample>()); 00237 00238 virtual QwtSeriesData<QwtSetSample> *copy() const; 00239 virtual QwtDoubleRect boundingRect() const; 00240 }; 00241 00245 class QWT_EXPORT QwtPointArrayData: public QwtSeriesData<QwtDoublePoint> 00246 { 00247 public: 00248 QwtPointArrayData(const QwtArray<double> &x, const QwtArray<double> &y); 00249 QwtPointArrayData(const double *x, const double *y, size_t size); 00250 QwtPointArrayData &operator=(const QwtPointArrayData &); 00251 virtual QwtSeriesData<QwtDoublePoint> *copy() const; 00252 00253 virtual QwtDoubleRect boundingRect() const; 00254 virtual size_t size() const; 00255 virtual QwtDoublePoint sample(size_t i) const; 00256 00257 const QwtArray<double> &xData() const; 00258 const QwtArray<double> &yData() const; 00259 00260 private: 00261 QwtArray<double> d_x; 00262 QwtArray<double> d_y; 00263 }; 00264 00268 class QWT_EXPORT QwtCPointerData: public QwtSeriesData<QwtDoublePoint> 00269 { 00270 public: 00271 QwtCPointerData(const double *x, const double *y, size_t size); 00272 QwtCPointerData &operator=(const QwtCPointerData &); 00273 virtual QwtSeriesData<QwtDoublePoint> *copy() const; 00274 00275 virtual QwtDoubleRect boundingRect() const; 00276 virtual size_t size() const; 00277 virtual QwtDoublePoint sample(size_t i) const; 00278 00279 const double *xData() const; 00280 const double *yData() const; 00281 00282 private: 00283 const double *d_x; 00284 const double *d_y; 00285 size_t d_size; 00286 }; 00287 00344 class QWT_EXPORT QwtSyntheticPointData: public QwtSeriesData<QwtDoublePoint> 00345 { 00346 public: 00347 QwtSyntheticPointData(size_t size, 00348 const QwtDoubleInterval & = QwtDoubleInterval()); 00349 00350 void setSize(size_t size); 00351 size_t size() const; 00352 00353 void setInterval(const QwtDoubleInterval& ); 00354 QwtDoubleInterval interval() const; 00355 00356 virtual QwtDoubleRect boundingRect() const; 00357 virtual QwtDoublePoint sample(size_t i) const; 00358 00365 virtual double y(double x) const = 0; 00366 virtual double x(uint index) const; 00367 00368 virtual void setRectOfInterest(const QwtDoubleRect &); 00369 QwtDoubleRect rectOfInterest() const; 00370 00371 private: 00372 size_t d_size; 00373 QwtDoubleInterval d_interval; 00374 QwtDoubleRect d_rectOfInterest; 00375 QwtDoubleInterval d_intervalOfInterest; 00376 }; 00377 00378 00379 QWT_EXPORT QwtDoubleRect qwtBoundingRect( 00380 const QwtSeriesData<QwtDoublePoint> &); 00381 QWT_EXPORT QwtDoubleRect qwtBoundingRect( 00382 const QwtSeriesData<QwtIntervalSample> &); 00383 QWT_EXPORT QwtDoubleRect qwtBoundingRect( 00384 const QwtSeriesData<QwtSetSample> &); 00385 00386 #if defined(QWT_TEMPLATEDLL) 00387 // MOC_SKIP_BEGIN 00388 #if QT_VERSION < 0x040000 // there is already a QVector<QPointF> in qvector.h 00389 template class QWT_EXPORT QwtArray<QwtDoublePoint>; 00390 #endif 00391 template class QWT_EXPORT QwtArray<QwtIntervalSample>; 00392 template class QWT_EXPORT QwtArray<QwtSetSample>; 00393 // MOC_SKIP_END 00394 #endif 00395 00396 #endif // !QWT_SERIES_DATA_H