changeset 214:3254b15472f3 refactoring

set_up_query() Sets up the query data (from mmap()ed file).
author mas01cr
date Tue, 04 Dec 2007 09:40:55 +0000
parents 78a144448bda
children 241bc55a1a4e
files audioDB.h query.cpp
diffstat 2 files changed, 37 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/audioDB.h	Tue Dec 04 09:16:48 2007 +0000
+++ b/audioDB.h	Tue Dec 04 09:40:55 2007 +0000
@@ -149,8 +149,6 @@
   double* dataBuf;
   double* inBuf;
   double* l2normTable;
-  double* qNorm;
-  double* sNorm;
   double* timesTable;
   double* powerTable;
 
@@ -198,6 +196,7 @@
   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, unsigned int *nvp);
   void trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0);
   void trackSequenceQueryRad(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0);
 
@@ -263,7 +262,6 @@
   trackTable(0), \
   dataBuf(0), \
   l2normTable(0), \
-  qNorm(0), \
   timesTable(0), \
   fileTableLength(0), \
   trackTableLength(0), \
--- a/query.cpp	Tue Dec 04 09:16:48 2007 +0000
+++ b/query.cpp	Tue Dec 04 09:40:55 2007 +0000
@@ -165,35 +165,41 @@
   read(dbfid, *data_buffer_p, trackTable[track] * sizeof(double) * dbH->dim);
 }
 
+void audioDB::set_up_query(double **qp, double **qnp, unsigned *nvp) {
+  *nvp = (statbuf.st_size - sizeof(int)) / (dbH->dim * sizeof(double));
+  
+  if(!(dbH->flags & O2_FLAG_L2NORM)) {
+    error("Database must be L2 normed for sequence query","use -L2NORM");
+  }
+
+  if(*nvp < sequenceLength) {
+    error("Query shorter than requested sequence length", "maybe use -l");
+  }
+  
+  if(verbosity>1) {
+    std::cerr << "performing norms ... "; std::cerr.flush();
+  }
+
+  *qp = new double[*nvp * dbH->dim];
+  memcpy(*qp, indata+sizeof(int), *nvp * dbH->dim * sizeof(double));
+  *qnp = new double[*nvp];
+  unitNorm(*qp, dbH->dim, *nvp, *qnp);
+}
+
 void audioDB::trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse){
   
   initTables(dbName, inFile);
   
-  // For each input vector, find the closest pointNN matching output vectors and report
-  // we use stdout in this stub version
-  unsigned numVectors = (statbuf.st_size-sizeof(int))/(sizeof(double)*dbH->dim);
-  double* query = (double*)(indata+sizeof(int));
-  double* queryCopy = 0;
+  unsigned int numVectors;
+  double *query, *query_data;
+  double *qNorm, *sNorm;
 
-  if(!(dbH->flags & O2_FLAG_L2NORM) )
-    error("Database must be L2 normed for sequence query","use -L2NORM");
+  set_up_query(&query, &qNorm, &numVectors);
+  query_data = query;
 
-  if(numVectors<sequenceLength)
-    error("Query shorter than requested sequence length", "maybe use -l");
-  
-  if(verbosity>1) {
-    std::cerr << "performing norms ... "; std::cerr.flush();
-  }
   unsigned dbVectors = dbH->length/(sizeof(double)*dbH->dim);
 
-  // Make a copy of the query
-  queryCopy = new double[numVectors*dbH->dim];
-  memcpy(queryCopy, query, numVectors*dbH->dim*sizeof(double));
-  qNorm = new double[numVectors];
   sNorm = new double[dbVectors];
-  assert(qNorm&&sNorm&&queryCopy&&sequenceLength);    
-  unitNorm(queryCopy, dbH->dim, numVectors, qNorm);
-  query = queryCopy;
 
   // Make norm measurements relative to sequenceLength
   unsigned i,j;
@@ -556,8 +562,8 @@
   // Clean up
   if(trackOffsetTable)
     delete[] trackOffsetTable;
-  if(queryCopy)
-    delete[] queryCopy;
+  if(query_data)
+    delete[] query_data;
   if(qNorm)
     delete[] qNorm;
   if(sNorm)
@@ -582,28 +588,16 @@
   
   initTables(dbName, inFile);
   
-  // For each input vector, find the closest pointNN matching output vectors and report
-  // we use stdout in this stub version
-  unsigned numVectors = (statbuf.st_size-sizeof(int))/(sizeof(double)*dbH->dim);
-  double* query = (double*)(indata+sizeof(int));
-  double* queryCopy = 0;
+  unsigned int numVectors;
+  double *query, *query_data;
+  double *qNorm, *sNorm;
 
-  if(!(dbH->flags & O2_FLAG_L2NORM) )
-    error("Database must be L2 normed for sequence query","use -l2norm");
-  
-  if(verbosity>1) {
-    std::cerr << "performing norms ... "; std::cerr.flush();
-  }
+  set_up_query(&query, &qNorm, &numVectors);
+  query_data = query;
+
   unsigned dbVectors = dbH->length/(sizeof(double)*dbH->dim);
 
-  // Make a copy of the query
-  queryCopy = new double[numVectors*dbH->dim];
-  memcpy(queryCopy, query, numVectors*dbH->dim*sizeof(double));
-  qNorm = new double[numVectors];
   sNorm = new double[dbVectors];
-  assert(qNorm&&sNorm&&queryCopy&&sequenceLength);    
-  unitNorm(queryCopy, dbH->dim, numVectors, qNorm);
-  query = queryCopy;
 
   // Make norm measurements relative to sequenceLength
   unsigned i,j;
@@ -945,8 +939,8 @@
   // Clean up
   if(trackOffsetTable)
     delete[] trackOffsetTable;
-  if(queryCopy)
-    delete[] queryCopy;
+  if(query_data)
+    delete[] query_data;
   if(qNorm)
     delete[] qNorm;
   if(sNorm)