# HG changeset patch # User mas01cr # Date 1230116103 0 # Node ID a7d61291fbdac95972d3889a21d18c1ff48447c3 # Parent 166312a124bc1ae2437f0a9989d2d04f246f9ea6 Baby steps... Decorate accumulator.h with a preprocessor #define and test; then create appropriate accumulators in audioDB::query() and delete them if necessary in audioDB::cleanup(). diff -r 166312a124bc -r a7d61291fbda accumulator.h --- a/accumulator.h Wed Dec 24 10:54:59 2008 +0000 +++ b/accumulator.h Wed Dec 24 10:55:03 2008 +0000 @@ -1,6 +1,11 @@ +#ifndef ACCUMULATOR_H +#define ACCUMULATOR_H + class Accumulator { public: virtual ~Accumulator() {}; virtual void add_point(adb_result_t *r) = 0; virtual adb_query_results_t *get_points() = 0; }; + +#endif diff -r 166312a124bc -r a7d61291fbda audioDB.cpp --- a/audioDB.cpp Wed Dec 24 10:54:59 2008 +0000 +++ b/audioDB.cpp Wed Dec 24 10:55:03 2008 +0000 @@ -225,6 +225,8 @@ delete [] trackOffsetTable; if(reporter) delete reporter; + if(accumulator) + delete accumulator; if(exact_evaluation_queue) delete exact_evaluation_queue; if(rng) diff -r 166312a124bc -r a7d61291fbda query.cpp --- a/query.cpp Wed Dec 24 10:54:59 2008 +0000 +++ b/query.cpp Wed Dec 24 10:55:03 2008 +0000 @@ -1,6 +1,9 @@ #include "audioDB.h" #include "reporter.h" +#include "audioDB-internals.h" +#include "accumulators.h" + bool audioDB::powers_acceptable(double p1, double p2) { if (use_absolute_threshold) { if ((p1 < absolute_threshold) || (p2 < absolute_threshold)) { @@ -31,15 +34,18 @@ sequenceLength = 1; normalizedDistance = false; reporter = new pointQueryReporter< std::greater < NNresult > >(pointNN); + accumulator = new DBAccumulator(pointNN); break; case O2_TRACK_QUERY: sequenceLength = 1; normalizedDistance = false; reporter = new trackAveragingReporter< std::greater< NNresult > >(pointNN, trackNN, dbH->numFiles); + accumulator = new PerTrackAccumulator(pointNN, trackNN); break; case O2_SEQUENCE_QUERY: if(no_unit_norming) normalizedDistance = false; + accumulator = new PerTrackAccumulator(pointNN, trackNN); if(radius == 0) { reporter = new trackAveragingReporter< std::less< NNresult > >(pointNN, trackNN, dbH->numFiles); } else { @@ -56,6 +62,7 @@ case O2_N_SEQUENCE_QUERY: if(no_unit_norming) normalizedDistance = false; + accumulator = new PerTrackAccumulator(pointNN, trackNN); if(radius == 0) { reporter = new trackSequenceQueryNNReporter< std::less < NNresult > >(pointNN, trackNN, dbH->numFiles); } else { @@ -70,6 +77,7 @@ } break; case O2_ONE_TO_ONE_N_SEQUENCE_QUERY : + accumulator = new NearestAccumulator(); if(radius == 0) { error("query-type not yet supported"); } else {