changeset 426:4a22a0bdf9a9 api-inversion

Deal with audioDB::UnitNorm Deal with it by removing it completely, that is. New inline function audiodb_l2norm_buffer(), replacing the three instances of that functionality dotted throughout the code.
author mas01cr
date Wed, 24 Dec 2008 10:55:20 +0000
parents d65410f4bb85
children adaa6a688a04
files audioDB-internals.h audioDB.h index.cpp insert.cpp l2norm.cpp query.cpp
diffstat 6 files changed, 15 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- a/audioDB-internals.h	Wed Dec 24 10:55:16 2008 +0000
+++ b/audioDB-internals.h	Wed Dec 24 10:55:20 2008 +0000
@@ -110,3 +110,12 @@
   }
   return result;
 }
+
+static inline void audiodb_l2norm_buffer(double *d, size_t dim, size_t nvectors, double *l) {
+  while(nvectors--) {
+    double *d1 = d;
+    double *d2 = d;
+    *l++ = audiodb_dot_product(d1, d2, dim);
+    d += dim;
+  }
+}
--- a/audioDB.h	Wed Dec 24 10:55:16 2008 +0000
+++ b/audioDB.h	Wed Dec 24 10:55:20 2008 +0000
@@ -340,8 +340,6 @@
   void initInputFile(const char *inFile, bool loadData = true);
   void initTables(const char* dbName, const char* inFile = 0);
   void initTablesFromKey(const char* dbName, const Uns32T queryIndex);
-  void unitNorm(double* X, unsigned d, unsigned n, double* qNorm);
-  void unitNormAndInsertL2(double* X, unsigned dim, unsigned n);
   unsigned getKeyPos(const char* key);
   void prefix_name(char** const name, const char* prefix);
 
--- a/index.cpp	Wed Dec 24 10:55:16 2008 +0000
+++ b/index.cpp	Wed Dec 24 10:55:20 2008 +0000
@@ -12,7 +12,7 @@
 // 19th August 2008 - added O2_FLAG_LARGE_ADB support
 
 #include "audioDB.h"
-
+#include "audioDB-internals.h"
 
 /************************* LSH point index to audioDB conversion  *****************/
 Uns32T audioDB::index_to_trackID(Uns32T lshID, Uns32T nPntBits){
@@ -310,7 +310,7 @@
     *sNormpp = new double[trackTable[trackID]];
     assert(*sNormpp);
     *snPtrp = *sNormpp;
-    unitNorm(fvp, dbH->dim, trackTable[trackID], *sNormpp);
+    audiodb_l2norm_buffer(fvp, dbH->dim, trackTable[trackID], *sNormpp);
     sequence_sum(*sNormpp, trackTable[trackID], sequenceLength);
     sequence_sqrt(*sNormpp, trackTable[trackID], sequenceLength);
   }
--- a/insert.cpp	Wed Dec 24 10:55:16 2008 +0000
+++ b/insert.cpp	Wed Dec 24 10:55:20 2008 +0000
@@ -81,7 +81,7 @@
 static int audiodb_insert_datum_internal(adb_t *adb, adb_datum_internal_t *datum) {
 
   off_t size, offset, nfiles;
-  double *l2norm_buffer = NULL, *lp, *dp;  
+  double *l2norm_buffer = NULL;
 
   /* 1. check write permission; */
   if(!(adb->flags & O_RDWR)) {
@@ -187,17 +187,7 @@
      !(adb->header->flags & O2_FLAG_LARGE_ADB)) {
     l2norm_buffer = (double *) malloc(datum->nvectors * sizeof(double));
     
-    /* FIXME: shared code with audiodb_norm_existing() */
-    dp = (double *) datum->data;
-    lp = l2norm_buffer;
-    for(size_t i = 0; i < datum->nvectors; i++) {
-      *lp = 0;
-      for(unsigned int k = 0; k < datum->dim; k++) {
-        *lp += (*dp)*(*dp);
-        dp++;
-      }
-      lp++;
-    }
+    audiodb_l2norm_buffer((double *) datum->data, datum->dim, datum->nvectors, l2norm_buffer);
     lseek(adb->fd, adb->header->l2normTableOffset + offset / datum->dim, SEEK_SET);
     write_or_goto_error(adb->fd, l2norm_buffer, sizeof(double) * datum->nvectors);
     free(l2norm_buffer);
--- a/l2norm.cpp	Wed Dec 24 10:55:16 2008 +0000
+++ b/l2norm.cpp	Wed Dec 24 10:55:20 2008 +0000
@@ -6,7 +6,6 @@
 
 static int audiodb_l2norm_existing(adb_t *adb) {
   double *data_buffer, *l2norm_buffer;
-  double *dp, *lp;
   adb_header_t *header = adb->header;
   size_t data_buffer_size = ALIGN_PAGE_UP(header->length);
   size_t nvectors = header->length / (sizeof(double) * header->dim);
@@ -19,18 +18,7 @@
   if(!l2norm_buffer) {
     goto error;
   }
-
-  dp = data_buffer;
-  lp = l2norm_buffer;
-  for(size_t i = 0; i < nvectors; i++) {
-    *lp = 0;
-    for(unsigned int k = 0; k < header->dim; k++) {
-      *lp += (*dp)*(*dp);
-      dp++;
-    }
-    lp++;
-  }
-
+  audiodb_l2norm_buffer(data_buffer, header->dim, nvectors, l2norm_buffer);
   if(lseek(adb->fd, adb->header->l2normTableOffset, SEEK_SET) == (off_t) -1) {
     goto error;
   }
--- a/query.cpp	Wed Dec 24 10:55:16 2008 +0000
+++ b/query.cpp	Wed Dec 24 10:55:20 2008 +0000
@@ -338,7 +338,7 @@
   *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);
+  audiodb_l2norm_buffer(*qp, dbH->dim, *nvp, *qnp);
 
   sequence_sum(*qnp, *nvp, sequenceLength);
   sequence_sqrt(*qnp, *nvp, sequenceLength);
@@ -828,25 +828,3 @@
   if(meanDBdur)
     delete[] meanDBdur;
 }
-
-// Unit norm block of features
-void audioDB::unitNorm(double* X, unsigned dim, unsigned n, double* qNorm){
-  unsigned d;
-  double L2, *p;
-
-  VERB_LOG(2, "norming %u vectors...", n);
-  while(n--) {
-    p = X;
-    L2 = 0.0;
-    d = dim;
-    while(d--) {
-      L2 += *p * *p;
-      p++;
-    }
-    if(qNorm) {
-      *qNorm++=L2;
-    }
-    X += dim;
-  }
-  VERB_LOG(2, "done.\n");
-}