changeset 222:4a66c326bbf1 refactoring

Move usingQueryPoint logic into set_up_query() (And a similar change to set_up_db(). This causes the arglists to look quite hairy, but I forgive myself because they're internal-use only.)
author mas01cr
date Wed, 05 Dec 2007 12:47:33 +0000
parents b67fd44ce667
children e2e561eef3d6
files audioDB.h query.cpp
diffstat 2 files changed, 36 insertions(+), 48 deletions(-) [+]
line wrap: on
line diff
--- a/audioDB.h	Wed Dec 05 12:14:00 2007 +0000
+++ b/audioDB.h	Wed Dec 05 12:47:33 2007 +0000
@@ -196,8 +196,8 @@
   void initialize_arrays(int track, unsigned int numVectors, double *query, double *data_buffer, double **D, double **DD);
   void delete_arrays(int track, unsigned int numVectors, double **D, double **DD);
   void read_data(int track, double **data_buffer_p, size_t *data_buffer_size_p);
-  void set_up_query(double **qp, double **qnp, double **qpp, double *mqdp, unsigned int *nvp);
-  void set_up_db(double **snp, double **spp, double **mddp, unsigned int *dvp);
+  void set_up_query(double **qp, double **vqp, double **qnp, double **vqnp, double **qpp, double **vqpp, double *mqdp, unsigned int *nvp);
+  void set_up_db(double **snp, double **vsnp, double **spp, double **vspp, double **mddp, unsigned int *dvp);
   void trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0);
   void trackSequenceQueryRad(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0);
 
--- a/query.cpp	Wed Dec 05 12:14:00 2007 +0000
+++ b/query.cpp	Wed Dec 05 12:47:33 2007 +0000
@@ -167,7 +167,11 @@
   read(dbfid, *data_buffer_p, trackTable[track] * sizeof(double) * dbH->dim);
 }
 
-void audioDB::set_up_query(double **qp, double **qnp, double **qpp, double *mqdp, unsigned *nvp) {
+// These names deserve some unpicking.  The names starting with a "q"
+// are pointers to the query, norm and power vectors; the names
+// starting with "v" are things that will end up pointing to the
+// actual query point's information.  -- CSR, 2007-12-05
+void audioDB::set_up_query(double **qp, double **vqp, double **qnp, double **vqnp, double **qpp, double **vqpp, double *mqdp, unsigned *nvp) {
   *nvp = (statbuf.st_size - sizeof(int)) / (dbH->dim * sizeof(double));
   
   if(!(dbH->flags & O2_FLAG_L2NORM)) {
@@ -224,12 +228,33 @@
     delete [] querydurs;
     delete [] timesdata;
   }
+
+  // Defaults, for exhaustive search (!usingQueryPoint)
+  *vqp = *qp;
+  *vqnp = *qnp;
+  *vqpp = *qpp;
+
+  if(usingQueryPoint) {
+    if(queryPoint > *nvp || queryPoint > *nvp - sequenceLength + 1) {
+      error("queryPoint > numVectors-wL+1 in query");
+    } else {
+      if(verbosity>1) {
+	std::cerr << "query point: " << queryPoint << std::endl; std::cerr.flush();
+      }
+      *vqp = *qp + queryPoint * dbH->dim;
+      *vqnp = *qnp + queryPoint;
+      if (usingPower) {
+        *vqpp = *qpp + queryPoint;
+      }
+      *nvp = sequenceLength;
+    }
+  }
 }
 
 // FIXME: this is not the right name; we're not actually setting up
 // the database, but copying various bits of it out of mmap()ed tables
 // in order to reduce seeks.
-void audioDB::set_up_db(double **snp, double **spp, double **mddp, unsigned int *dvp) {
+void audioDB::set_up_db(double **snp, double **vsnp, double **spp, double **vspp, double **mddp, unsigned int *dvp) {
   *dvp = dbH->length / (dbH->dim * sizeof(double));
   *snp = new double[*dvp];
 
@@ -277,6 +302,9 @@
       (*mddp)[k] /= j;
     }
   }
+
+  *vsnp = *snp;
+  *vspp = *spp;
 }
 
 void audioDB::trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse){
@@ -288,18 +316,13 @@
   double *qNorm, *qnPtr, *qPower = 0, *qpPtr = 0;
   double meanQdur;
 
-  set_up_query(&query, &qNorm, &qPower, &meanQdur, &numVectors);
-  query_data = query;
-  qpPtr = qPower;
-  qnPtr = qNorm;
+  set_up_query(&query_data, &query, &qNorm, &qnPtr, &qPower, &qpPtr, &meanQdur, &numVectors);
 
   unsigned int dbVectors;
   double *sNorm, *snPtr, *sPower = 0, *spPtr = 0;
   double *meanDBdur = 0;
 
-  set_up_db(&sNorm, &sPower, &meanDBdur, &dbVectors);
-  spPtr = sPower;
-  snPtr = sNorm;
+  set_up_db(&sNorm, &snPtr, &sPower, &spPtr, &meanDBdur, &dbVectors);
   
   if(verbosity>1) {
     std::cerr << "matching tracks..." << std::endl;
@@ -334,21 +357,6 @@
     trackIDs[k]=~0;
   }
 
-  if(usingQueryPoint)
-    if(queryPoint>numVectors || queryPoint>numVectors-wL+1)
-      error("queryPoint > numVectors-wL+1 in query");
-    else{
-      if(verbosity>1) {
-	std::cerr << "query point: " << queryPoint << std::endl; std::cerr.flush();
-      }
-      query = query + queryPoint * dbH->dim;
-      qnPtr = qnPtr + queryPoint;
-      if (usingPower) {
-        qpPtr = qpPtr + queryPoint;
-      }
-      numVectors=wL;
-    }
-  
   double ** D = 0;    // Differences query and target 
   double ** DD = 0;   // Matched filter distance
 
@@ -588,18 +596,13 @@
   double *qNorm, *qnPtr, *qPower = 0, *qpPtr = 0;
   double meanQdur;
 
-  set_up_query(&query, &qNorm, &qPower, &meanQdur, &numVectors);
-  query_data = query;
-  qpPtr = qPower;
-  qnPtr = qNorm;
+  set_up_query(&query_data, &query, &qNorm, &qnPtr, &qPower, &qpPtr, &meanQdur, &numVectors);
 
   unsigned int dbVectors;
   double *sNorm, *snPtr, *sPower = 0, *spPtr = 0;
   double *meanDBdur = 0;
 
-  set_up_db(&sNorm, &sPower, &meanDBdur, &dbVectors);
-  spPtr = sPower;
-  snPtr = sNorm;
+  set_up_db(&sNorm, &snPtr, &sPower, &spPtr, &meanDBdur, &dbVectors);
   
   if(verbosity>1) {
     std::cerr << "matching tracks..." << std::endl;
@@ -636,21 +639,6 @@
     trackIDs[k]=~0;
   }
 
-  if(usingQueryPoint)
-    if(queryPoint>numVectors || queryPoint>numVectors-wL+1)
-      error("queryPoint > numVectors-wL+1 in query");
-    else{
-      if(verbosity>1) {
-	std::cerr << "query point: " << queryPoint << std::endl; std::cerr.flush();
-      }
-      query = query + queryPoint*dbH->dim;
-      qnPtr = qnPtr + queryPoint;
-      if (usingPower) {
-        qpPtr = qpPtr + queryPoint;
-      }
-      numVectors=wL;
-    }
-  
   double ** D = 0;    // Differences query and target 
   double ** DD = 0;   // Matched filter distance