Mercurial > hg > audiodb
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"); -}