comparison query.cpp @ 422:a7d61291fbda api-inversion

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().
author mas01cr
date Wed, 24 Dec 2008 10:55:03 +0000
parents ef4792df8f93
children b09d2eb1a2b2
comparison
equal deleted inserted replaced
421:166312a124bc 422:a7d61291fbda
1 #include "audioDB.h" 1 #include "audioDB.h"
2 #include "reporter.h" 2 #include "reporter.h"
3
4 #include "audioDB-internals.h"
5 #include "accumulators.h"
3 6
4 bool audioDB::powers_acceptable(double p1, double p2) { 7 bool audioDB::powers_acceptable(double p1, double p2) {
5 if (use_absolute_threshold) { 8 if (use_absolute_threshold) {
6 if ((p1 < absolute_threshold) || (p2 < absolute_threshold)) { 9 if ((p1 < absolute_threshold) || (p2 < absolute_threshold)) {
7 return false; 10 return false;
29 switch (queryType) { 32 switch (queryType) {
30 case O2_POINT_QUERY: 33 case O2_POINT_QUERY:
31 sequenceLength = 1; 34 sequenceLength = 1;
32 normalizedDistance = false; 35 normalizedDistance = false;
33 reporter = new pointQueryReporter< std::greater < NNresult > >(pointNN); 36 reporter = new pointQueryReporter< std::greater < NNresult > >(pointNN);
37 accumulator = new DBAccumulator<adb_result_dist_gt>(pointNN);
34 break; 38 break;
35 case O2_TRACK_QUERY: 39 case O2_TRACK_QUERY:
36 sequenceLength = 1; 40 sequenceLength = 1;
37 normalizedDistance = false; 41 normalizedDistance = false;
38 reporter = new trackAveragingReporter< std::greater< NNresult > >(pointNN, trackNN, dbH->numFiles); 42 reporter = new trackAveragingReporter< std::greater< NNresult > >(pointNN, trackNN, dbH->numFiles);
43 accumulator = new PerTrackAccumulator<adb_result_dist_gt>(pointNN, trackNN);
39 break; 44 break;
40 case O2_SEQUENCE_QUERY: 45 case O2_SEQUENCE_QUERY:
41 if(no_unit_norming) 46 if(no_unit_norming)
42 normalizedDistance = false; 47 normalizedDistance = false;
48 accumulator = new PerTrackAccumulator<adb_result_dist_lt>(pointNN, trackNN);
43 if(radius == 0) { 49 if(radius == 0) {
44 reporter = new trackAveragingReporter< std::less< NNresult > >(pointNN, trackNN, dbH->numFiles); 50 reporter = new trackAveragingReporter< std::less< NNresult > >(pointNN, trackNN, dbH->numFiles);
45 } else { 51 } else {
46 if(index_exists(dbName, radius, sequenceLength)){ 52 if(index_exists(dbName, radius, sequenceLength)){
47 char* indexName = index_get_name(dbName, radius, sequenceLength); 53 char* indexName = index_get_name(dbName, radius, sequenceLength);
54 } 60 }
55 break; 61 break;
56 case O2_N_SEQUENCE_QUERY: 62 case O2_N_SEQUENCE_QUERY:
57 if(no_unit_norming) 63 if(no_unit_norming)
58 normalizedDistance = false; 64 normalizedDistance = false;
65 accumulator = new PerTrackAccumulator<adb_result_dist_lt>(pointNN, trackNN);
59 if(radius == 0) { 66 if(radius == 0) {
60 reporter = new trackSequenceQueryNNReporter< std::less < NNresult > >(pointNN, trackNN, dbH->numFiles); 67 reporter = new trackSequenceQueryNNReporter< std::less < NNresult > >(pointNN, trackNN, dbH->numFiles);
61 } else { 68 } else {
62 if(index_exists(dbName, radius, sequenceLength)){ 69 if(index_exists(dbName, radius, sequenceLength)){
63 char* indexName = index_get_name(dbName, radius, sequenceLength); 70 char* indexName = index_get_name(dbName, radius, sequenceLength);
68 else 75 else
69 reporter = new trackSequenceQueryRadNNReporter(pointNN,trackNN, dbH->numFiles); 76 reporter = new trackSequenceQueryRadNNReporter(pointNN,trackNN, dbH->numFiles);
70 } 77 }
71 break; 78 break;
72 case O2_ONE_TO_ONE_N_SEQUENCE_QUERY : 79 case O2_ONE_TO_ONE_N_SEQUENCE_QUERY :
80 accumulator = new NearestAccumulator<adb_result_dist_lt>();
73 if(radius == 0) { 81 if(radius == 0) {
74 error("query-type not yet supported"); 82 error("query-type not yet supported");
75 } else { 83 } else {
76 reporter = new trackSequenceQueryRadNNReporterOneToOne(pointNN,trackNN, dbH->numFiles); 84 reporter = new trackSequenceQueryRadNNReporterOneToOne(pointNN,trackNN, dbH->numFiles);
77 } 85 }