Files
Upsilon/apps/shared/curve_view_range.cpp
Émilie Feral 1964d61fdc [libaxx] add cmath and use cmath instead of math.h when required
Change-Id: Id839b17d33c69e2e002f370e553ff35246a1bc90
2017-08-16 09:55:29 +02:00

43 lines
1.2 KiB
C++

#include "curve_view_range.h"
#include <cmath>
#include <ion.h>
#include <assert.h>
#include <stddef.h>
#include <float.h>
namespace Shared {
uint32_t CurveViewRange::rangeChecksum() {
float data[4] = {xMin(), xMax(), yMin(), yMax()};
size_t dataLengthInBytes = 4*sizeof(float);
assert((dataLengthInBytes & 0x3) == 0); // Assert that dataLengthInBytes is a multiple of 4
return Ion::crc32((uint32_t *)data, dataLengthInBytes>>2);
}
float CurveViewRange::yGridUnit() {
return 0.0f;
}
float CurveViewRange::computeGridUnit(Axis axis, float min, float max) {
int a = 0;
int b = 0;
float d = max - min;
float maxNumberOfUnits = k_maxNumberOfXGridUnits;
float minNumberOfUnits = k_minNumberOfXGridUnits;
if (axis == Axis::Y) {
maxNumberOfUnits = k_maxNumberOfYGridUnits;
minNumberOfUnits = k_minNumberOfYGridUnits;
}
float units[3] = {k_smallGridUnitMantissa, k_mediumGridUnitMantissa, k_largeGridUnitMantissa};
for (int k = 0; k < 3; k++) {
float unit = units[k];
if (std::floor(std::log10(d/(unit*maxNumberOfUnits))) != std::floor(std::log10(d/(unit*minNumberOfUnits)))) {
b = std::floor(std::log10(d/(unit*minNumberOfUnits)));
a = unit;
}
}
return a*std::pow(10.0f,b);
}
}