1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
* Qwt Widget Library
* Copyright (C) 1997 Josef Wilgen
* Copyright (C) 2002 Uwe Rathmann
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the Qwt License, Version 1.0
*****************************************************************************/
// vim: expandtab
#ifndef QWT_DATA_H
#define QWT_DATA_H 1
#include "qwt_global.h"
#include "qwt_array.h"
#include "qwt_double_rect.h"
#if defined(QWT_TEMPLATEDLL)
// MOC_SKIP_BEGIN
template class QWT_EXPORT QwtArray<QwtDoublePoint>;
template class QWT_EXPORT QwtArray<double>;
// MOC_SKIP_END
#endif
/*!
\brief QwtData defines an interface to any type of data.
Classes, derived from QwtData may:
- store the data in almost any type of container
- calculate the data on the fly instead of storing it
- implement data with error bars (this implies subclassing QwtPlot,
QwtCurve and QwtPlotCurve)
\warning In the future, "almost any type of container" may be limited to
containers supporting bi-directional iterators like the vector, array
and list classes in Qt or in the standard template library.
*/
class QWT_EXPORT QwtData
{
public:
QwtData();
virtual ~QwtData();
/*!
Return a pointer to a copy (virtual copy constructor)
*/
virtual QwtData *copy() const = 0;
/*!
Return the size of the data set
*/
virtual size_t size() const = 0;
/*!
Return the x value of data point i
\param i Index
\return x X value of data point i
*/
virtual double x(size_t i) const = 0;
/*!
Return the y value of data point i
\param i Index
\return y Y value of data point i
*/
virtual double y(size_t i) const = 0;
virtual QwtDoubleRect boundingRect() const;
protected:
/*!
Assignment operator (virtualized)
*/
QwtData &operator=(const QwtData &);
};
/*!
\brief Data class containing a single QwtArray<QwtDoublePoint> object.
*/
class QWT_EXPORT QwtDoublePointData: public QwtData
{
public:
/*!
Constructor
\sa QwtCurve::setData and QwtPlot::setCurveData.
*/
QwtDoublePointData(const QwtArray<QwtDoublePoint> &);
QwtDoublePointData &operator=(const QwtDoublePointData &);
virtual QwtData *copy() const;
virtual size_t size() const;
virtual double x(size_t i) const;
virtual double y(size_t i) const;
private:
QwtArray<QwtDoublePoint> d_data;
};
/*!
\brief Data class containing two QwtArray<double> objects.
*/
class QWT_EXPORT QwtArrayData: public QwtData
{
public:
QwtArrayData(const QwtArray<double> &x, const QwtArray<double> &y);
QwtArrayData(const double *x, const double *y, size_t size);
QwtArrayData &operator=(const QwtArrayData &);
virtual QwtData *copy() const;
virtual size_t size() const;
virtual double x(size_t i) const;
virtual double y(size_t i) const;
virtual QwtDoubleRect boundingRect() const;
private:
QwtArray<double> d_x;
QwtArray<double> d_y;
};
/*!
\brief Data class containing two pointers to memory blocks of doubles.
*/
class QWT_EXPORT QwtCPointerData: public QwtData
{
public:
/*!
Constructor
\warning The programmer must assure that the memory blocks referenced
by the pointers remain valid during the lifetime of the QwtPlotCPointer
object.
\sa QwtCurve::setRawData and QwtPlot::setCurveRawData.
*/
QwtCPointerData(const double *x, const double *y, size_t size);
QwtCPointerData &operator=(const QwtCPointerData &);
virtual QwtData *copy() const;
virtual size_t size() const;
virtual double x(size_t i) const;
virtual double y(size_t i) const;
virtual QwtDoubleRect boundingRect() const;
private:
const double *d_x;
const double *d_y;
size_t d_size;
};
#endif // !QWT_DATA
// Local Variables:
// mode: C++
// c-file-style: "stroustrup"
// indent-tabs-mode: nil
// End:
|