diff base/RangeMapper.cpp @ 1038:cc27f35aa75c cxx11

Introducing the signed 64-bit frame index type, and fixing build failures from inclusion of -Wconversion with -Werror. Not finished yet.
author Chris Cannam
date Tue, 03 Mar 2015 15:18:24 +0000
parents 12a6140b3ae0
children c7b9c902642f
line wrap: on
line diff
--- a/base/RangeMapper.cpp	Tue Mar 03 09:33:59 2015 +0000
+++ b/base/RangeMapper.cpp	Tue Mar 03 15:18:24 2015 +0000
@@ -22,7 +22,7 @@
 #include <iostream>
 
 LinearRangeMapper::LinearRangeMapper(int minpos, int maxpos,
-				     float minval, float maxval,
+				     double minval, double maxval,
                                      QString unit, bool inverted) :
     m_minpos(minpos),
     m_maxpos(maxpos),
@@ -36,7 +36,7 @@
 }
 
 int
-LinearRangeMapper::getPositionForValue(float value) const
+LinearRangeMapper::getPositionForValue(double value) const
 {
     int position = getPositionForValueUnclamped(value);
     if (position < m_minpos) position = m_minpos;
@@ -45,36 +45,36 @@
 }
 
 int
-LinearRangeMapper::getPositionForValueUnclamped(float value) const
+LinearRangeMapper::getPositionForValueUnclamped(double value) const
 {
     int position = m_minpos +
-        lrintf(((value - m_minval) / (m_maxval - m_minval))
-               * (m_maxpos - m_minpos));
+        int(lrint(((value - m_minval) / (m_maxval - m_minval))
+                  * (m_maxpos - m_minpos)));
     if (m_inverted) return m_maxpos - (position - m_minpos);
     else return position;
 }
 
-float
+double
 LinearRangeMapper::getValueForPosition(int position) const
 {
     if (position < m_minpos) position = m_minpos;
     if (position > m_maxpos) position = m_maxpos;
-    float value = getValueForPositionUnclamped(position);
+    double value = getValueForPositionUnclamped(position);
     return value;
 }
 
-float
+double
 LinearRangeMapper::getValueForPositionUnclamped(int position) const
 {
     if (m_inverted) position = m_maxpos - (position - m_minpos);
-    float value = m_minval +
-        ((float(position - m_minpos) / float(m_maxpos - m_minpos))
+    double value = m_minval +
+        ((double(position - m_minpos) / double(m_maxpos - m_minpos))
          * (m_maxval - m_minval));
     return value;
 }
 
 LogRangeMapper::LogRangeMapper(int minpos, int maxpos,
-                               float minval, float maxval,
+                               double minval, double maxval,
                                QString unit, bool inverted) :
     m_minpos(minpos),
     m_maxpos(maxpos),
@@ -97,26 +97,26 @@
 
 void
 LogRangeMapper::convertMinMax(int minpos, int maxpos,
-                              float minval, float maxval,
-                              float &minlog, float &ratio)
+                              double minval, double maxval,
+                              double &minlog, double &ratio)
 {
-    static float thresh = powf(10, -10);
+    static double thresh = powf(10, -10);
     if (minval < thresh) minval = thresh;
-    minlog = log10f(minval);
-    ratio = (maxpos - minpos) / (log10f(maxval) - minlog);
+    minlog = log10(minval);
+    ratio = (maxpos - minpos) / (log10(maxval) - minlog);
 }
 
 void
-LogRangeMapper::convertRatioMinLog(float ratio, float minlog,
+LogRangeMapper::convertRatioMinLog(double ratio, double minlog,
                                    int minpos, int maxpos,
-                                   float &minval, float &maxval)
+                                   double &minval, double &maxval)
 {
-    minval = powf(10, minlog);
-    maxval = powf(10, (maxpos - minpos) / ratio + minlog);
+    minval = pow(10, minlog);
+    maxval = pow(10, (maxpos - minpos) / ratio + minlog);
 }
 
 int
-LogRangeMapper::getPositionForValue(float value) const
+LogRangeMapper::getPositionForValue(double value) const
 {
     int position = getPositionForValueUnclamped(value);
     if (position < m_minpos) position = m_minpos;
@@ -125,29 +125,29 @@
 }
 
 int
-LogRangeMapper::getPositionForValueUnclamped(float value) const
+LogRangeMapper::getPositionForValueUnclamped(double value) const
 {
-    static float thresh = powf(10, -10);
+    static double thresh = pow(10, -10);
     if (value < thresh) value = thresh;
-    int position = lrintf((log10(value) - m_minlog) * m_ratio) + m_minpos;
+    int position = int(lrint((log10(value) - m_minlog) * m_ratio)) + m_minpos;
     if (m_inverted) return m_maxpos - (position - m_minpos);
     else return position;
 }
 
-float
+double
 LogRangeMapper::getValueForPosition(int position) const
 {
     if (position < m_minpos) position = m_minpos;
     if (position > m_maxpos) position = m_maxpos;
-    float value = getValueForPositionUnclamped(position);
+    double value = getValueForPositionUnclamped(position);
     return value;
 }
 
-float
+double
 LogRangeMapper::getValueForPositionUnclamped(int position) const
 {
     if (m_inverted) position = m_maxpos - (position - m_minpos);
-    float value = powf(10, (position - m_minpos) / m_ratio + m_minlog);
+    double value = pow(10, (position - m_minpos) / m_ratio + m_minlog);
     return value;
 }
 
@@ -163,7 +163,7 @@
 }
 
 int
-InterpolatingRangeMapper::getPositionForValue(float value) const
+InterpolatingRangeMapper::getPositionForValue(double value) const
 {
     int pos = getPositionForValueUnclamped(value);
     CoordMap::const_iterator i = m_mappings.begin();
@@ -174,16 +174,16 @@
 }
 
 int
-InterpolatingRangeMapper::getPositionForValueUnclamped(float value) const
+InterpolatingRangeMapper::getPositionForValueUnclamped(double value) const
 {
-    float p = interpolate(&m_mappings, value);
-    return lrintf(p);
+    double p = interpolate(&m_mappings, value);
+    return int(lrint(p));
 }
 
-float
+double
 InterpolatingRangeMapper::getValueForPosition(int position) const
 {
-    float val = getValueForPositionUnclamped(position);
+    double val = getValueForPositionUnclamped(position);
     CoordMap::const_iterator i = m_mappings.begin();
     if (val < i->first) val = i->first;
     i = m_mappings.end(); --i;
@@ -191,18 +191,19 @@
     return val;
 }
 
-float
+double
 InterpolatingRangeMapper::getValueForPositionUnclamped(int position) const
 {
     return interpolate(&m_reverse, position);
 }
 
 template <typename T>
-float
-InterpolatingRangeMapper::interpolate(T *mapping, float value) const
+double
+InterpolatingRangeMapper::interpolate(T *mapping, double value) const
 {
     // lower_bound: first element which does not compare less than value
-    typename T::const_iterator i = mapping->lower_bound(value);
+    typename T::const_iterator i =
+        mapping->lower_bound(typename T::key_type(value));
 
     if (i == mapping->begin()) {
         // value is less than or equal to first element, so use the
@@ -219,7 +220,7 @@
     typename T::const_iterator j = i;
     --j;
 
-    float gradient = float(i->second - j->second) / float(i->first - j->first);
+    double gradient = double(i->second - j->second) / double(i->first - j->first);
 
     return j->second + (value - j->first) * gradient;
 }
@@ -316,24 +317,24 @@
 }
 
 int
-AutoRangeMapper::getPositionForValue(float value) const
+AutoRangeMapper::getPositionForValue(double value) const
 {
     return m_mapper->getPositionForValue(value);
 }
 
-float
+double
 AutoRangeMapper::getValueForPosition(int position) const
 {
     return m_mapper->getValueForPosition(position);
 }
 
 int
-AutoRangeMapper::getPositionForValueUnclamped(float value) const
+AutoRangeMapper::getPositionForValueUnclamped(double value) const
 {
     return m_mapper->getPositionForValueUnclamped(value);
 }
 
-float
+double
 AutoRangeMapper::getValueForPositionUnclamped(int position) const
 {
     return m_mapper->getValueForPositionUnclamped(position);