diff options
Diffstat (limited to 'src/bm/bmmisc.h')
-rw-r--r-- | src/bm/bmmisc.h | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/bm/bmmisc.h b/src/bm/bmmisc.h index a3d711a..057adac 100644 --- a/src/bm/bmmisc.h +++ b/src/bm/bmmisc.h @@ -27,6 +27,7 @@ #include <QVector> #include <QString> #include <QStringList> +#include <QPair> #include <QImage> #include <QDateTime> #include <QSqlQuery> @@ -52,9 +53,12 @@ public: static bool getMultiOption( const QStringList &args, const QString &option, QStringList *values, QString *error, bool unique = true); + static bool getMultiOption2( + const QStringList &args, const QString &option, QList<QStringList> *values, int n, + QString *error); static bool hasOption(const QStringList &args, const QString &option); static qreal median(const QList<qreal> &values); - + static int medianPos(const QList<qreal> &values, bool lastDuplicate = true); static qreal v2y( const qreal v, const qreal ymax, const qreal vmin, const qreal yfact, const qreal ydefault); static QDateTime createCurrDateTime(int timestamp); @@ -69,6 +73,33 @@ public: static qreal log2diff(qreal val1, qreal val2, const QString &metric); static bool normalize(QList<qreal> &v); static QString compactDateString(int timestamp); + + // ### 2 B DOCUMENTED! + // (Note that a function template cannot be compiled and linked independently, so its + // definition needs to go here) + template <typename T> static void insertRankedId( + QList<QPair<T, qreal> > *ranked, int limit, T t, qreal value) + { + Q_ASSERT(limit >= 0); + + int i; + for (i = 0; (i < limit) && (i < ranked->size()); ++i) { + if (value > ranked->at(i).second) + break; + } + + if (i == limit) + return; + + Q_ASSERT(i <= ranked->size()); + ranked->insert(i, qMakePair(t, value)); + + if (ranked->size() > limit) { + Q_ASSERT(ranked->size() == (limit + 1)); + ranked->removeLast(); + Q_ASSERT(ranked->size() == limit); + } + } }; #endif // BMMISC_H |