changeset 219:d1c912ff8286 refactoring

Move query/db times setup into set_up_query() and set_up_db()
author mas01cr
date Wed, 05 Dec 2007 11:09:45 +0000
parents 016303fc3e1b
children 0e872105789b
files audioDB.h query.cpp
diffstat 2 files changed, 47 insertions(+), 94 deletions(-) [+]
line wrap: on
line diff
--- a/audioDB.h	Tue Dec 04 16:48:23 2007 +0000
+++ b/audioDB.h	Wed Dec 05 11:09:45 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, unsigned int *nvp);
-  void set_up_db(double **snp, double **spp, unsigned int *dvp);
+  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 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	Tue Dec 04 16:48:23 2007 +0000
+++ b/query.cpp	Wed Dec 05 11:09:45 2007 +0000
@@ -167,7 +167,7 @@
   read(dbfid, *data_buffer_p, trackTable[track] * sizeof(double) * dbH->dim);
 }
 
-void audioDB::set_up_query(double **qp, double **qnp, double **qpp, unsigned *nvp) {
+void audioDB::set_up_query(double **qp, double **qnp, double **qpp, double *mqdp, unsigned *nvp) {
   *nvp = (statbuf.st_size - sizeof(int)) / (dbH->dim * sizeof(double));
   
   if(!(dbH->flags & O2_FLAG_L2NORM)) {
@@ -206,12 +206,30 @@
     sequence_sum(*qpp, *nvp, sequenceLength);
     sequence_average(*qpp, *nvp, sequenceLength);
   }
+
+  if (usingTimes) {
+    unsigned int k;
+    *mqdp = 0.0;
+    double *querydurs = new double[*nvp];
+    double *timesdata = new double[*nvp*2];
+    insertTimeStamps(*nvp, timesFile, timesdata);
+    for(k = 0; k < *nvp; k++) {
+      querydurs[k] = timesdata[2*k+1] - timesdata[2*k];
+      *mqdp += querydurs[k];
+    }
+    *mqdp /= k;
+    if(verbosity>1) {
+      std::cerr << "mean query file duration: " << *mqdp << std::endl;
+    }
+    delete [] querydurs;
+    delete [] timesdata;
+  }
 }
 
 // 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, unsigned int *dvp) {
+void audioDB::set_up_db(double **snp, double **spp, double **mddp, unsigned int *dvp) {
   *dvp = dbH->length / (dbH->dim * sizeof(double));
   *snp = new double[*dvp];
 
@@ -242,6 +260,23 @@
       sppp += trackTable[i];
     }
   }
+
+  if (usingTimes) {
+    if(!(dbH->flags & O2_FLAG_TIMES)) {
+      error("query timestamps provided for non-timed database", dbName);
+    }
+
+    *mddp = new double[dbH->numFiles];
+
+    for(unsigned int k = 0; k < dbH->numFiles; k++) {
+      unsigned int j;
+      (*mddp)[k] = 0.0;
+      for(j = 0; j < trackTable[k]; j++) {
+	(*mddp)[k] += timesTable[2*j+1] - timesTable[2*j];
+      }
+      (*mddp)[k] /= j;
+    }
+  }
 }
 
 void audioDB::trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse){
@@ -251,16 +286,18 @@
   unsigned int numVectors;
   double *query, *query_data;
   double *qNorm, *qnPtr, *qPower = 0, *qpPtr = 0;
+  double meanQdur;
 
-  set_up_query(&query, &qNorm, &qPower, &numVectors);
+  set_up_query(&query, &qNorm, &qPower, &meanQdur, &numVectors);
   query_data = query;
   qpPtr = qPower;
   qnPtr = qNorm;
 
   unsigned int dbVectors;
   double *sNorm, *snPtr, *sPower = 0, *spPtr = 0;
+  double *meanDBdur = 0;
 
-  set_up_db(&sNorm, &sPower, &dbVectors);
+  set_up_db(&sNorm, &sPower, &meanDBdur, &dbVectors);
   spPtr = sPower;
   snPtr = sNorm;
   
@@ -297,45 +334,6 @@
     trackIDs[k]=~0;
   }
 
-  // Timestamp and durations processing
-  double meanQdur = 0;
-  double *timesdata = 0;
-  double *querydurs = 0;
-  double *meanDBdur = 0;
-  
-  if(usingTimes && !(dbH->flags & O2_FLAG_TIMES)){
-    std::cerr << "warning: ignoring query timestamps for non-timestamped database" << std::endl;
-    usingTimes=0;
-  }
-  
-  else if(!usingTimes && (dbH->flags & O2_FLAG_TIMES))
-    std::cerr << "warning: no timestamps given for query. Ignoring database timestamps." << std::endl;
-  
-  else if(usingTimes && (dbH->flags & O2_FLAG_TIMES)){
-    timesdata = new double[2*numVectors];
-    querydurs = new double[numVectors];
-
-    insertTimeStamps(numVectors, timesFile, timesdata);
-    // Calculate durations of points
-    for(k=0; k<numVectors; k++) {
-      querydurs[k] = timesdata[2*k+1] - timesdata[2*k];
-      meanQdur += querydurs[k];
-    }
-    meanQdur/=k;
-    if(verbosity>1) {
-      std::cerr << "mean query file duration: " << meanQdur << std::endl;
-    }
-    meanDBdur = new double[dbH->numFiles];
-    assert(meanDBdur);
-    for(k=0; k<dbH->numFiles; k++){
-      meanDBdur[k]=0.0;
-      for(j=0; j<trackTable[k]; j++) {
-	meanDBdur[k]+=timesTable[2*j+1]-timesTable[2*j];
-      }
-      meanDBdur[k]/=j;
-    }
-  }
-
   if(usingQueryPoint)
     if(queryPoint>numVectors || queryPoint>numVectors-wL+1)
       error("queryPoint > numVectors-wL+1 in query");
@@ -577,10 +575,6 @@
     delete[] D;
   if(DD)
     delete[] DD;
-  if(timesdata)
-    delete[] timesdata;
-  if(querydurs)
-    delete[] querydurs;
   if(meanDBdur)
     delete[] meanDBdur;
 }
@@ -592,16 +586,18 @@
   unsigned int numVectors;
   double *query, *query_data;
   double *qNorm, *qnPtr, *qPower = 0, *qpPtr = 0;
+  double meanQdur;
 
-  set_up_query(&query, &qNorm, &qPower, &numVectors);
+  set_up_query(&query, &qNorm, &qPower, &meanQdur, &numVectors);
   query_data = query;
   qpPtr = qPower;
   qnPtr = qNorm;
 
   unsigned int dbVectors;
   double *sNorm, *snPtr, *sPower = 0, *spPtr = 0;
+  double *meanDBdur = 0;
 
-  set_up_db(&sNorm, &sPower, &dbVectors);
+  set_up_db(&sNorm, &sPower, &meanDBdur, &dbVectors);
   spPtr = sPower;
   snPtr = sNorm;
   
@@ -640,45 +636,6 @@
     trackIDs[k]=~0;
   }
 
-  // Timestamp and durations processing
-  double meanQdur = 0;
-  double *timesdata = 0;
-  double *querydurs = 0;
-  double *meanDBdur = 0;
-  
-  if(usingTimes && !(dbH->flags & O2_FLAG_TIMES)){
-    std::cerr << "warning: ignoring query timestamps for non-timestamped database" << std::endl;
-    usingTimes=0;
-  }
-  
-  else if(!usingTimes && (dbH->flags & O2_FLAG_TIMES))
-    std::cerr << "warning: no timestamps given for query. Ignoring database timestamps." << std::endl;
-  
-  else if(usingTimes && (dbH->flags & O2_FLAG_TIMES)){
-    timesdata = new double[2*numVectors];
-    querydurs = new double[numVectors];
-
-    insertTimeStamps(numVectors, timesFile, timesdata);
-    // Calculate durations of points
-    for(k=0; k<numVectors; k++){
-      querydurs[k] = timesdata[2*k+1] - timesdata[2*k];
-      meanQdur += querydurs[k];
-    }
-    meanQdur/=k;
-    if(verbosity>1) {
-      std::cerr << "mean query file duration: " << meanQdur << std::endl;
-    }
-    meanDBdur = new double[dbH->numFiles];
-    assert(meanDBdur);
-    for(k=0; k<dbH->numFiles; k++){
-      meanDBdur[k]=0.0;
-      for(j=0; j<trackTable[k]; j++) {
-	meanDBdur[k]+=timesTable[2*j+1]-timesTable[2*j];
-      }
-      meanDBdur[k]/=j;
-    }
-  }
-
   if(usingQueryPoint)
     if(queryPoint>numVectors || queryPoint>numVectors-wL+1)
       error("queryPoint > numVectors-wL+1 in query");
@@ -898,10 +855,6 @@
     delete[] D;
   if(DD)
     delete[] DD;
-  if(timesdata)
-    delete[] timesdata;
-  if(querydurs)
-    delete[] querydurs;
   if(meanDBdur)
     delete[] meanDBdur;
 }