Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

qwt_data.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 "qwt_math.h"
00011 #include "qwt_data.h"
00012 
00013 QwtData::QwtData()
00014 {
00015 }
00016 
00017 QwtData::~QwtData()
00018 {
00019 }
00020 
00032 QwtDoubleRect QwtData::boundingRect() const
00033 {
00034     const size_t sz = size();
00035 
00036     if ( sz <= 0 )
00037         return QwtDoubleRect(1.0, 1.0, -2.0, -2.0); // invalid
00038 
00039     double minX, maxX, minY, maxY;
00040     minX = maxX = x(0);
00041     minY = maxY = y(0);
00042 
00043     for ( size_t i = 1; i < sz; i++ )
00044     {
00045         const double xv = x(i);
00046         if ( xv < minX )
00047             minX = xv;
00048         if ( xv > maxX )
00049             maxX = xv;
00050 
00051         const double yv = y(i);
00052         if ( yv < minY )
00053             minY = yv;
00054         if ( yv > maxY )
00055             maxY = yv;
00056     }
00057     return QwtDoubleRect(minX, minY, maxX - minX, maxY - minY);
00058 }
00059 
00060 QwtDoublePointData::QwtDoublePointData(const QwtArray<QwtDoublePoint> &data):
00061     d_data(data)
00062 {
00063 }
00064 
00066 QwtDoublePointData& QwtDoublePointData::operator=(
00067     const QwtDoublePointData &data)
00068 {
00069     if (this != &data)
00070     {
00071         d_data = data.d_data;
00072     }
00073     return *this;
00074 }
00075 
00076 size_t QwtDoublePointData::size() const 
00077 { 
00078     return d_data.size(); 
00079 }
00080 
00081 double QwtDoublePointData::x(size_t i) const 
00082 { 
00083     return d_data[int(i)].x(); 
00084 }
00085 
00086 double QwtDoublePointData::y(size_t i) const 
00087 { 
00088     return d_data[int(i)].y(); 
00089 }
00090 
00091 const QwtArray<QwtDoublePoint> QwtDoublePointData::data() const
00092 {
00093     return d_data;
00094 }
00095 
00096 QwtData *QwtDoublePointData::copy() const 
00097 { 
00098     return new QwtDoublePointData(d_data); 
00099 }
00100 
00106 QwtArrayData::QwtArrayData(
00107         const QwtArray<double> &x, const QwtArray<double> &y): 
00108     d_x(x), 
00109     d_y(y)
00110 {
00111 }
00112 
00118 QwtArrayData::QwtArrayData(const double *x, const double *y, size_t size)
00119 {
00120 #if QT_VERSION >= 0x040000
00121     d_x.resize(size);
00122     qMemCopy(d_x.data(), x, size * sizeof(double));
00123 
00124     d_y.resize(size);
00125     qMemCopy(d_y.data(), y, size * sizeof(double));
00126 #else
00127     d_x.detach();
00128     d_x.duplicate(x, size);
00129 
00130     d_y.detach();
00131     d_y.duplicate(y, size);
00132 #endif
00133 }
00134 
00136 QwtArrayData& QwtArrayData::operator=(const QwtArrayData &data)
00137 {
00138     if (this != &data)
00139     {
00140         d_x = data.d_x;
00141         d_y = data.d_y;
00142     }
00143     return *this;
00144 }
00145 
00146 size_t QwtArrayData::size() const 
00147 { 
00148     return qwtMin(d_x.size(), d_y.size()); 
00149 }
00150 
00151 double QwtArrayData::x(size_t i) const 
00152 { 
00153     return d_x[int(i)]; 
00154 }
00155 
00156 double QwtArrayData::y(size_t i) const 
00157 { 
00158     return d_y[int(i)]; 
00159 }
00160 
00161 const QwtArray<double> &QwtArrayData::xData() const
00162 {
00163     return d_x;
00164 }
00165 
00166 const QwtArray<double> &QwtArrayData::yData() const
00167 {
00168     return d_y;
00169 }
00170 
00171 QwtData *QwtArrayData::copy() const 
00172 { 
00173     return new QwtArrayData(d_x, d_y); 
00174 }
00175 
00181 QwtDoubleRect QwtArrayData::boundingRect() const
00182 {
00183     const size_t sz = size();
00184 
00185     if ( sz <= 0 )
00186         return QwtDoubleRect(1.0, 1.0, -2.0, -2.0); // invalid
00187 
00188     double minX, maxX, minY, maxY;
00189     QwtArray<double>::ConstIterator xIt = d_x.begin();
00190     QwtArray<double>::ConstIterator yIt = d_y.begin();
00191     QwtArray<double>::ConstIterator end = d_x.begin() + sz;
00192     minX = maxX = *xIt++;
00193     minY = maxY = *yIt++;
00194 
00195     while ( xIt < end )
00196     {
00197         const double xv = *xIt++;
00198         if ( xv < minX )
00199             minX = xv;
00200         if ( xv > maxX )
00201             maxX = xv;
00202 
00203         const double yv = *yIt++;
00204         if ( yv < minY )
00205             minY = yv;
00206         if ( yv > maxY )
00207             maxY = yv;
00208     }
00209     return QwtDoubleRect(minX, minY, maxX - minX, maxY - minY);
00210 }
00211 
00212 QwtCPointerData::QwtCPointerData(const double *x, const double *y,
00213                                  size_t size):
00214     d_x(x), d_y(y), d_size(size)
00215 {
00216 }
00217 
00219 QwtCPointerData& QwtCPointerData::operator=(const QwtCPointerData &data)
00220 {
00221     if (this != &data)
00222     {
00223         d_x = data.d_x;
00224         d_y = data.d_y;
00225         d_size = data.d_size;
00226     }
00227     return *this;
00228 }
00229 
00230 size_t QwtCPointerData::size() const 
00231 {   
00232     return d_size; 
00233 }
00234 
00235 double QwtCPointerData::x(size_t i) const 
00236 { 
00237     return d_x[int(i)]; 
00238 }
00239 
00240 double QwtCPointerData::y(size_t i) const 
00241 { 
00242     return d_y[int(i)]; 
00243 }
00244 
00245 const double *QwtCPointerData::xData() const
00246 {
00247     return d_x;
00248 }
00249 
00250 const double *QwtCPointerData::yData() const
00251 {
00252     return d_y;
00253 }
00254 
00255 QwtData *QwtCPointerData::copy() const 
00256 {
00257     return new QwtCPointerData(d_x, d_y, d_size);
00258 }
00259 
00265 QwtDoubleRect QwtCPointerData::boundingRect() const
00266 {
00267     const size_t sz = size();
00268 
00269     if ( sz <= 0 )
00270         return QwtDoubleRect(1.0, 1.0, -2.0, -2.0); // invalid
00271 
00272     double minX, maxX, minY, maxY;
00273     const double *xIt = d_x;
00274     const double *yIt = d_y;
00275     const double *end = d_x + sz;
00276     minX = maxX = *xIt++;
00277     minY = maxY = *yIt++;
00278 
00279     while ( xIt < end )
00280     {
00281         const double xv = *xIt++;
00282         if ( xv < minX )
00283             minX = xv;
00284         if ( xv > maxX )
00285             maxX = xv;
00286 
00287         const double yv = *yIt++;
00288         if ( yv < minY )
00289             minY = yv;
00290         if ( yv > maxY )
00291             maxY = yv;
00292     }
00293     return QwtDoubleRect(minX, minY, maxX - minX, maxY - minY);
00294 }

Generated on Wed Aug 31 23:02:29 2005 for Qwt User's Guide by  doxygen 1.4.1