From 30c13fe9736c4684ff3e3538772efb190cd87dbd Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Thu, 21 Feb 2013 13:07:00 +0000 Subject: [PATCH] Code Cleanup: RideFileCache remove mallocs Mark Rage's superfast meanmax computer works like a charm but uses stdlib malloc/free for memory allocation. --- src/RideFileCache.cpp | 25 ++++++++++++------------- src/RideFileCache.h | 7 ++++--- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/RideFileCache.cpp b/src/RideFileCache.cpp index fb573eab4..61f5a81c9 100644 --- a/src/RideFileCache.cpp +++ b/src/RideFileCache.cpp @@ -477,11 +477,11 @@ void RideFileCache::RideFileCache::compute() */ -data_t * +void MeanMaxComputer::integrate_series(cpintdata &data) { // would be better to do pure QT and use QVector -- but no memory leak - data_t *integrated= (data_t *)malloc(sizeof(data_t)*(data.points.size()+1)); + integrated.resize(data.points.size()+1); int i; data_t acc=0; @@ -491,11 +491,11 @@ MeanMaxComputer::integrate_series(cpintdata &data) } integrated[i]=acc; - return integrated; + return; } data_t -MeanMaxComputer::partial_max_mean(data_t *dataseries_i, int start, int end, int length, int *offset) +MeanMaxComputer::partial_max_mean(int start, int end, int length, int *offset) { int i=0; data_t candidate=0; @@ -503,7 +503,7 @@ MeanMaxComputer::partial_max_mean(data_t *dataseries_i, int start, int end, int int best_i=0; for (i=start; i<(1+end-length); i++) { - data_t test_energy=dataseries_i[length+i]-dataseries_i[i]; + data_t test_energy=integrated[length+i]-integrated[i]; if (test_energy>candidate) { candidate=test_energy; best_i=i; @@ -516,7 +516,7 @@ MeanMaxComputer::partial_max_mean(data_t *dataseries_i, int start, int end, int data_t -MeanMaxComputer::divided_max_mean(data_t *dataseries_i, int datalength, int length, int *offset) +MeanMaxComputer::divided_max_mean(int datalength, int length, int *offset) { int shift=length; @@ -537,12 +537,12 @@ MeanMaxComputer::divided_max_mean(data_t *dataseries_i, int datalength, int leng for (start=0; start+window_length<=datalength; start+=shift) { end=start+window_length; - energy=dataseries_i[end]-dataseries_i[start]; + energy=integrated[end]-integrated[start]; if (energy < candidate) { continue; } - data_t window_mm=partial_max_mean(dataseries_i, start, end, length, &this_offset); + data_t window_mm=partial_max_mean(start, end, length, &this_offset); if (window_mm>candidate) { candidate=window_mm; @@ -556,11 +556,11 @@ MeanMaxComputer::divided_max_mean(data_t *dataseries_i, int datalength, int leng if (end= candidate) { - data_t window_mm=partial_max_mean(dataseries_i, start, end, length, &this_offset); + data_t window_mm=partial_max_mean(start, end, length, &this_offset); if (window_mm>candidate) { candidate=window_mm; @@ -748,12 +748,12 @@ MeanMaxComputer::run() // the bests go in here... QVector ride_bests(total_secs + 1); - data_t *dataseries_i = integrate_series(data); + integrate_series(data); for (int i=1; irecIntSecs(); @@ -766,7 +766,6 @@ MeanMaxComputer::run() ride_bests[sec] = val; } } - free(dataseries_i); // // FILL IN THE GAPS AND FILL TARGET ARRAY diff --git a/src/RideFileCache.h b/src/RideFileCache.h index 637f841c0..729337e1f 100644 --- a/src/RideFileCache.h +++ b/src/RideFileCache.h @@ -264,11 +264,12 @@ class MeanMaxComputer : public QThread private: // Mark Rages' algorithm for fast find of mean max - data_t *integrate_series(cpintdata &data); - data_t partial_max_mean(data_t *dataseries_i, int start, int end, int length, int *offset); - data_t divided_max_mean(data_t *dataseries_i, int datalength, int length, int *offset); + void integrate_series(cpintdata &data); + data_t partial_max_mean(int start, int end, int length, int *offset); + data_t divided_max_mean(int datalength, int length, int *offset); RideFile *ride; + QVector integrated; QVector &array; QVector integratedArray;