changeset 451:ef9ef130e27b api-inversion

Miscellaneous trivial de-audioDB::ifications dbfid, trackTable, sequenceHop, and dbH are all easy; queryPoint and usingQueryPoint only marginally less so.
author mas01cr
date Wed, 24 Dec 2008 10:57:05 +0000
parents 0c1c8726a79b
children 25ee0b77f8ca
files audioDB.h query.cpp
diffstat 2 files changed, 20 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/audioDB.h	Wed Dec 24 10:57:01 2008 +0000
+++ b/audioDB.h	Wed Dec 24 10:57:05 2008 +0000
@@ -325,7 +325,7 @@
   void error(const char* a, const char* b = "", const char *sysFunc = 0);
 
   void insertTimeStamps(unsigned n, std::ifstream* timesFile, double* timesdata);
-  void query_loop(adb_query_spec_t *spec, Uns32T queryIndex);
+  void query_loop(adb_t *adb, adb_query_spec_t *spec, Uns32T queryIndex);
   void query_loop_points(adb_query_spec_t *spec, double* query, adb_qpointers_internal_t *qpointers);
   void initRNG();
   void initDBHeader(const char *dbName);
--- a/query.cpp	Wed Dec 24 10:57:01 2008 +0000
+++ b/query.cpp	Wed Dec 24 10:57:05 2008 +0000
@@ -205,7 +205,7 @@
   }
   else{
     VERB_LOG(1, "Calling brute-force query on database %s\n", dbName);
-    query_loop(&qspec, query_from_key_index);
+    query_loop(adb, &qspec, query_from_key_index);
   }
 
   adb_query_results_t *rs = accumulator->get_points();
@@ -652,7 +652,7 @@
     Uns32T sPos = trackIndexOffset+pp.spos; // index into l2norm table
     // Test power thresholds before computing distance
     if( ( (!power_refine) || audiodb_powers_acceptable(&spec->refine, qpointers->power[qPos], dbpointers.power[sPos])) &&
-	( qPos<qpointers->nvectors-sequence_length+1 && pp.spos<trackTable[pp.trackID]-sequence_length+1 ) ){
+	( qPos<qpointers->nvectors-sequence_length+1 && pp.spos<(*adb->track_lengths)[pp.trackID]-sequence_length+1 ) ){
       // Non-large ADB track data is loaded inside power test for efficiency
       if( !(dbH->flags & O2_FLAG_LARGE_ADB) && (currentTrack!=pp.trackID) ){
 	// On currentTrack change, allocate and load track data
@@ -690,14 +690,14 @@
   SAFE_DELETE_ARRAY(dbpointers.mean_duration);
 }
 
-void audioDB::query_loop(adb_query_spec_t *spec, Uns32T queryIndex) {
+void audioDB::query_loop(adb_t *adb, adb_query_spec_t *spec, Uns32T queryIndex) {
   
   double *query, *query_data;
   adb_qpointers_internal_t qpointers = {0}, dbpointers = {0};
 
   bool power_refine = spec->refine.flags & (ADB_REFINE_ABSOLUTE_THRESHOLD|ADB_REFINE_RELATIVE_THRESHOLD);
 
-  if( dbH->flags & O2_FLAG_LARGE_ADB )
+  if( adb->header->flags & O2_FLAG_LARGE_ADB )
     error("error: LARGE_ADB requires indexed query");
 
   if(audiodb_query_spec_qpointers(adb, spec, &query_data, &query, &qpointers)) {
@@ -708,7 +708,7 @@
     error("failed to set up db");
   }
 
-  unsigned j,k,track,trackOffset=0, HOP_SIZE=sequenceHop;
+  unsigned j,k,track,trackOffset=0, HOP_SIZE = spec->refine.hopsize;
   unsigned wL = spec->qid.sequence_length;
   double **D = 0;    // Differences query and target 
   double **DD = 0;   // Matched filter distance
@@ -723,9 +723,9 @@
   // Track loop 
   size_t data_buffer_size = 0;
   double *data_buffer = 0;
-  lseek(dbfid, dbH->dataOffset, SEEK_SET);
+  lseek(adb->fd, adb->header->dataOffset, SEEK_SET);
 
-  for(processedTracks=0, track=0 ; processedTracks < dbH->numFiles ; track++, processedTracks++) {
+  for(processedTracks=0, track=0 ; processedTracks < adb->header->numFiles ; track++, processedTracks++) {
 
     trackOffset = (*adb->track_offsets)[track];
 
@@ -738,7 +738,7 @@
           error("key not found", nextKey);
         }
         trackOffset = (*adb->track_offsets)[track];
-        lseek(dbfid, dbH->dataOffset + trackOffset, SEEK_SET);
+        lseek(adb->fd, adb->header->dataOffset + trackOffset, SEEK_SET);
       } else {
 	break;
       }
@@ -746,21 +746,21 @@
 
     // skip identity on query_from_key
     if( query_from_key && (track == queryIndex) ) {
-      if(queryIndex!=dbH->numFiles-1){
+      if(queryIndex!=adb->header->numFiles-1){
 	track++;
 	trackOffset = (*adb->track_offsets)[track];
-	lseek(dbfid, dbH->dataOffset + trackOffset, SEEK_SET);
+	lseek(adb->fd, adb->header->dataOffset + trackOffset, SEEK_SET);
       }
       else{
 	break;
       }
     }
 
-    trackIndexOffset = trackOffset / (dbH->dim * sizeof(double)); // dbpointers.nvectors offset
+    trackIndexOffset = trackOffset / (adb->header->dim * sizeof(double)); // dbpointers.nvectors offset
 
-    if(audiodb_read_data(adb, dbfid, track, &data_buffer, &data_buffer_size))
+    if(audiodb_read_data(adb, adb->fd, track, &data_buffer, &data_buffer_size))
       error("failed to read data");
-    if(wL <= trackTable[track]) {  // test for short sequences
+    if(wL <= (*adb->track_lengths)[track]) {  // test for short sequences
       
       audiodb_initialize_arrays(adb, spec, track, qpointers.nvectors, query, data_buffer, D, DD);
 
@@ -769,7 +769,7 @@
 
 	// Search for minimum distance by shingles (concatenated vectors)
 	for(j = 0; j <= qpointers.nvectors - wL; j += HOP_SIZE) {
-	  for(k = 0; k <= trackTable[track] - wL; k += HOP_SIZE) {
+	  for(k = 0; k <= (*adb->track_lengths)[track] - wL; k += HOP_SIZE) {
             double thisDist = 0;
             double qn = qpointers.l2norm[j];
             double sn = dbpointers.l2norm[trackIndexOffset + k];
@@ -792,7 +792,11 @@
                 adb_result_t r;
                 r.key = fileTable + track * O2_FILETABLE_ENTRY_SIZE;
                 r.dist = thisDist;
-                r.qpos = usingQueryPoint ? queryPoint : j;
+                if(spec->qid.flags & ADB_QUERY_ID_FLAG_EXHAUSTIVE) {
+                  r.qpos = j;
+                } else {
+                  r.qpos = spec->qid.sequence_start;
+                }
                 r.ipos = k;
                 accumulator->add_point(&r);
               }