annotate base/RangeMapper.h @ 879:eb6b6a88faed

Unit-test RangeMapper, fix a couple of bugs
author Chris Cannam
date Fri, 31 Jan 2014 13:39:37 +0000
parents b4a8d8221eaf
children b4787b595db3
rev   line source
Chris@189 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@189 2
Chris@189 3 /*
Chris@189 4 Sonic Visualiser
Chris@189 5 An audio file viewer and annotation editor.
Chris@189 6 Centre for Digital Music, Queen Mary, University of London.
Chris@202 7 This file copyright 2006 QMUL.
Chris@189 8
Chris@189 9 This program is free software; you can redistribute it and/or
Chris@189 10 modify it under the terms of the GNU General Public License as
Chris@189 11 published by the Free Software Foundation; either version 2 of the
Chris@189 12 License, or (at your option) any later version. See the file
Chris@189 13 COPYING included with this distribution for more information.
Chris@189 14 */
Chris@189 15
Chris@189 16 #ifndef _RANGE_MAPPER_H_
Chris@189 17 #define _RANGE_MAPPER_H_
Chris@189 18
Chris@189 19 #include <QString>
Chris@189 20
Chris@686 21 #include "Debug.h"
Chris@686 22
Chris@189 23
Chris@189 24 class RangeMapper
Chris@189 25 {
Chris@189 26 public:
Chris@189 27 virtual ~RangeMapper() { }
Chris@189 28 virtual int getPositionForValue(float value) const = 0;
Chris@189 29 virtual float getValueForPosition(int position) const = 0;
Chris@189 30 virtual QString getUnit() const { return ""; }
Chris@189 31 };
Chris@189 32
Chris@189 33
Chris@189 34 class LinearRangeMapper : public RangeMapper
Chris@189 35 {
Chris@189 36 public:
Chris@879 37 /**
Chris@879 38 * Map values in range minval->maxval linearly into integer range
Chris@879 39 * minpos->maxpos. minval and minpos must be less than maxval and
Chris@879 40 * maxpos respectively. If inverted is true, the range will be
Chris@879 41 * mapped "backwards" (minval to maxpos and maxval to minpos).
Chris@879 42 */
Chris@189 43 LinearRangeMapper(int minpos, int maxpos,
Chris@189 44 float minval, float maxval,
Chris@464 45 QString unit = "", bool inverted = false);
Chris@189 46
Chris@189 47 virtual int getPositionForValue(float value) const;
Chris@189 48 virtual float getValueForPosition(int position) const;
Chris@189 49
Chris@189 50 virtual QString getUnit() const { return m_unit; }
Chris@189 51
Chris@189 52 protected:
Chris@189 53 int m_minpos;
Chris@189 54 int m_maxpos;
Chris@189 55 float m_minval;
Chris@189 56 float m_maxval;
Chris@189 57 QString m_unit;
Chris@464 58 bool m_inverted;
Chris@189 59 };
Chris@189 60
Chris@189 61
Chris@189 62 class LogRangeMapper : public RangeMapper
Chris@189 63 {
Chris@189 64 public:
Chris@189 65 LogRangeMapper(int minpos, int maxpos,
Chris@356 66 float minval, float maxval,
Chris@464 67 QString m_unit = "", bool inverted = false);
Chris@189 68
Chris@356 69 static void convertRatioMinLog(float ratio, float minlog,
Chris@356 70 int minpos, int maxpos,
Chris@356 71 float &minval, float &maxval);
Chris@356 72
Chris@356 73 static void convertMinMax(int minpos, int maxpos,
Chris@356 74 float minval, float maxval,
Chris@356 75 float &ratio, float &minlog);
Chris@356 76
Chris@189 77 virtual int getPositionForValue(float value) const;
Chris@189 78 virtual float getValueForPosition(int position) const;
Chris@189 79
Chris@189 80 virtual QString getUnit() const { return m_unit; }
Chris@189 81
Chris@189 82 protected:
Chris@189 83 int m_minpos;
Chris@189 84 int m_maxpos;
Chris@189 85 float m_ratio;
Chris@189 86 float m_minlog;
Chris@189 87 float m_maxlog;
Chris@189 88 QString m_unit;
Chris@464 89 bool m_inverted;
Chris@189 90 };
Chris@189 91
Chris@189 92
Chris@189 93 #endif