[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/work/kst/portto4/kst
From: Peter Kümmel <syntheticpp () gmx ! net>
Date: 2011-01-14 14:27:49
Message-ID: 20110114142749.AE6FDAC8B3 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1214399 by kuemmel:
- fix crashes when loading nercdf data
- don't exit when a field is not found
M +25 -3 src/datasources/netcdf/netcdfsource.cpp
M +3 -0 src/datasources/netcdf/netcdfsource.h
M +10 -0 tests/testhistogram.cpp
--- branches/work/kst/portto4/kst/src/datasources/netcdf/netcdfsource.cpp \
#1214398:1214399 @@ -179,8 +179,12 @@
QMap<QString, double> DataInterfaceNetCdfVector::metaScalars(const QString& field)
{
+ NcVar *var = netcdf._ncfile->get_var(field.toLatin1().constData());
+ if (!var) {
+ KST_DBG qDebug() << "Queried field " << field << " which can't be read" << endl;
+ return QMap<QString, double>();
+ }
QMap<QString, double> fieldScalars;
- NcVar *var = netcdf._ncfile->get_var(field.toLatin1().constData());
fieldScalars["NbAttributes"] = var->num_atts();
for (int i=0; i<var->num_atts(); ++i) {
NcAtt *att = var->get_att(i);
@@ -201,9 +205,13 @@
QMap<QString, QString> DataInterfaceNetCdfVector::metaStrings(const QString& field)
{
+ NcVar *var = netcdf._ncfile->get_var(field.toLatin1().constData());
+ if (!var) {
+ KST_DBG qDebug() << "Queried field " << field << " which can't be read" << endl;
+ return QMap<QString, QString>();
+ }
QMap<QString, QString> fieldStrings;
QString tmpString;
- NcVar *var = netcdf._ncfile->get_var(field.toLatin1().constData());
for (int i=0; i<var->num_atts(); ++i) {
NcAtt *att = var->get_att(i);
// Only handle char/unspecified attributes as fieldStrings, the others as \
fieldScalars @@ -256,6 +264,9 @@
QByteArray bytes = matrix.toLatin1();
NcVar *var = netcdf._ncfile->get_var(bytes.constData()); // var is owned by \
_ncfile + if (!var) {
+ return DataMatrix::DataInfo();
+ }
if (var->num_dims() != 2) {
return DataMatrix::DataInfo();
@@ -296,6 +307,7 @@
NetcdfSource::NetcdfSource(Kst::ObjectStore *store, QSettings *cfg, const QString& \
filename, const QString& type, const QDomElement &element) : Kst::DataSource(store, \
cfg, filename, type), _ncfile(0L),
+ _ncErr(NcError::silent_nonfatal),
is(new DataInterfaceNetCdfScalar(*this)),
it(new DataInterfaceNetCdfString(*this)),
iv(new DataInterfaceNetCdfVector(*this)),
@@ -352,6 +364,9 @@
for (int i = 0; i < nb_vars; i++) {
NcVar *var = _ncfile->get_var(i);
+ if (!var) {
+ continue;
+ }
if (var->num_dims() == 0) {
_scalarList += var->name();
} else if (var->num_dims() == 1) {
@@ -403,6 +418,9 @@
int nb_vars = _ncfile->num_vars();
for (int j = 0; j < nb_vars; j++) {
NcVar *var = _ncfile->get_var(j);
+ if (!var) {
+ continue;
+ }
int fc = var->num_vals() / var->rec_size();
_maxFrameCount = qMax(_maxFrameCount, fc);
updated = updated || (_frameCounts[var->name()] != fc);
@@ -417,9 +435,12 @@
// TODO error handling
QByteArray bytes = field.toLatin1();
NcVar *var = _ncfile->get_var(bytes.constData()); // var is owned by _ncfile
+ if (var) {
var->get(v);
return 1;
}
+ return 0;
+}
int NetcdfSource::readString(QString *stringValue, const QString& stringName)
{
@@ -427,9 +448,9 @@
NcAtt *att = _ncfile->get_att((NcToken) stringName.toLatin1().data());
if (att) {
*stringValue = QString(att->as_string(0));
+ delete att;
return 1;
}
- delete att;
return 0;
}
@@ -592,6 +613,7 @@
QByteArray bytes = field.toLatin1();
NcVar *var = _ncfile->get_var(bytes.constData());
if (!var) {
+ KST_DBG qDebug() << "Queried field " << field << " which can't be read" << endl;
return 0;
}
return var->rec_size();
--- branches/work/kst/portto4/kst/src/datasources/netcdf/netcdfsource.h \
#1214398:1214399 @@ -73,6 +73,9 @@
int _maxFrameCount;
NcFile *_ncfile;
+ // we must hold an NcError to overwrite the exit-on-error behaviour of netCDF
+ NcError _ncErr;
+
// QMap<QString, QString> _metaData;
// TODO remove friend
--- branches/work/kst/portto4/kst/tests/testhistogram.cpp #1214398:1214399
@@ -30,8 +30,18 @@
void TestHistogram::testHistogram() {
Kst::GeneratedVectorPtr gvp = \
Kst::kst_cast<Kst::GeneratedVector>(_store.createObject<Kst::GeneratedVector>()); \
Q_ASSERT(gvp); + QCOMPARE(gvp->length(), 1);
+
gvp->changeRange(0, 10, 100);
+ QCOMPARE(gvp->max(), 0.0);
+ QCOMPARE(gvp->length(), 100);
+
+ gvp->internalUpdate();
+ QCOMPARE(gvp->max(), 10.0);
+ QCOMPARE(gvp->length(), 100);
+
Kst::VectorPtr vp(gvp);
+ QCOMPARE(vp->max(), 10.0);
Kst::HistogramPtr h1 = \
Kst::kst_cast<Kst::Histogram>(_store.createObject<Kst::Histogram>()); h1->change(vp, \
0, 10, 10, Kst::Histogram::Number);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic