Mercurial > hg > audiodb
changeset 427:adaa6a688a04 api-inversion
Move sequence_foo() functions out of audioDB:: namespace...
... and into the internals header, mostly to get them out of the way.
That means they have to be inline, which is probably suboptimal but will
do for now.
author | mas01cr |
---|---|
date | Wed, 24 Dec 2008 10:55:24 +0000 |
parents | 4a22a0bdf9a9 |
children | 1e748d834e24 |
files | audioDB-internals.h audioDB.h index.cpp query.cpp |
diffstat | 4 files changed, 70 insertions(+), 73 deletions(-) [+] |
line wrap: on
line diff
--- a/audioDB-internals.h Wed Dec 24 10:55:20 2008 +0000 +++ b/audioDB-internals.h Wed Dec 24 10:55:24 2008 +0000 @@ -119,3 +119,53 @@ d += dim; } } + +// This is a common pattern in sequence queries: what we are doing is +// taking a window of length seqlen over a buffer of length length, +// and placing the sum of the elements in that window in the first +// element of the window: thus replacing all but the last seqlen +// elements in the buffer with the corresponding windowed sum. +static inline void audiodb_sequence_sum(double *buffer, int length, int seqlen) { + double tmp1, tmp2, *ps; + int j, w; + + tmp1 = *buffer; + j = 1; + w = seqlen - 1; + while(w--) { + *buffer += buffer[j++]; + } + ps = buffer + 1; + w = length - seqlen; // +1 - 1 + while(w--) { + tmp2 = *ps; + if(isfinite(tmp1)) { + *ps = *(ps - 1) - tmp1 + *(ps + seqlen - 1); + } else { + for(int i = 1; i < seqlen; i++) { + *ps += *(ps + i); + } + } + tmp1 = tmp2; + ps++; + } +} + +// In contrast to audiodb_sequence_sum() above, +// audiodb_sequence_sqrt() and audiodb_sequence_average() below are +// simple mappers across the sequence. +static inline void audiodb_sequence_sqrt(double *buffer, int length, int seqlen) { + int w = length - seqlen + 1; + while(w--) { + *buffer = sqrt(*buffer); + buffer++; + } +} + +static inline void audiodb_sequence_average(double *buffer, int length, int seqlen) { + int w = length - seqlen + 1; + while(w--) { + *buffer /= seqlen; + buffer++; + } +}
--- a/audioDB.h Wed Dec 24 10:55:20 2008 +0000 +++ b/audioDB.h Wed Dec 24 10:55:24 2008 +0000 @@ -321,10 +321,6 @@ // private methods void error(const char* a, const char* b = "", const char *sysFunc = 0); - void sequence_sum(double *buffer, int length, int seqlen); - void sequence_sqrt(double *buffer, int length, int seqlen); - void sequence_average(double *buffer, int length, int seqlen); - 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);
--- a/index.cpp Wed Dec 24 10:55:20 2008 +0000 +++ b/index.cpp Wed Dec 24 10:55:24 2008 +0000 @@ -104,11 +104,11 @@ for(Uns32T i = 0; i < dbH->numFiles; i++){ if(trackTable[i] >= sequenceLength) { - sequence_sum(snpp, trackTable[i], sequenceLength); - sequence_sqrt(snpp, trackTable[i], sequenceLength); + audiodb_sequence_sum(snpp, trackTable[i], sequenceLength); + audiodb_sequence_sqrt(snpp, trackTable[i], sequenceLength); - sequence_sum(sppp, trackTable[i], sequenceLength); - sequence_average(sppp, trackTable[i], sequenceLength); + audiodb_sequence_sum(sppp, trackTable[i], sequenceLength); + audiodb_sequence_average(sppp, trackTable[i], sequenceLength); } snpp += trackTable[i]; sppp += trackTable[i]; @@ -302,8 +302,8 @@ close(powerfd); } - sequence_sum(*sPowerp, trackTable[trackID], sequenceLength); - sequence_average(*sPowerp, trackTable[trackID], sequenceLength); + audiodb_sequence_sum(*sPowerp, trackTable[trackID], sequenceLength); + audiodb_sequence_average(*sPowerp, trackTable[trackID], sequenceLength); powerTable = 0; // Allocate and calculate the l2norm sequence @@ -311,8 +311,8 @@ assert(*sNormpp); *snPtrp = *sNormpp; audiodb_l2norm_buffer(fvp, dbH->dim, trackTable[trackID], *sNormpp); - sequence_sum(*sNormpp, trackTable[trackID], sequenceLength); - sequence_sqrt(*sNormpp, trackTable[trackID], sequenceLength); + audiodb_sequence_sum(*sNormpp, trackTable[trackID], sequenceLength); + audiodb_sequence_sqrt(*sNormpp, trackTable[trackID], sequenceLength); } }
--- a/query.cpp Wed Dec 24 10:55:20 2008 +0000 +++ b/query.cpp Wed Dec 24 10:55:24 2008 +0000 @@ -145,55 +145,6 @@ return O2_ERR_KEYNOTFOUND; } -// This is a common pattern in sequence queries: what we are doing is -// taking a window of length seqlen over a buffer of length length, -// and placing the sum of the elements in that window in the first -// element of the window: thus replacing all but the last seqlen -// elements in the buffer with the corresponding windowed sum. -void audioDB::sequence_sum(double *buffer, int length, int seqlen) { - double tmp1, tmp2, *ps; - int j, w; - - tmp1 = *buffer; - j = 1; - w = seqlen - 1; - while(w--) { - *buffer += buffer[j++]; - } - ps = buffer + 1; - w = length - seqlen; // +1 - 1 - while(w--) { - tmp2 = *ps; - if(isfinite(tmp1)) { - *ps = *(ps - 1) - tmp1 + *(ps + seqlen - 1); - } else { - for(int i = 1; i < seqlen; i++) { - *ps += *(ps + i); - } - } - tmp1 = tmp2; - ps++; - } -} - -// In contrast to sequence_sum() above, sequence_sqrt() and -// sequence_average() below are simple mappers across the sequence. -void audioDB::sequence_sqrt(double *buffer, int length, int seqlen) { - int w = length - seqlen + 1; - while(w--) { - *buffer = sqrt(*buffer); - buffer++; - } -} - -void audioDB::sequence_average(double *buffer, int length, int seqlen) { - int w = length - seqlen + 1; - while(w--) { - *buffer /= seqlen; - buffer++; - } -} - void audioDB::initialize_arrays(int track, unsigned int numVectors, double *query, double *data_buffer, double **D, double **DD) { unsigned int j, k, l, w; double *dp, *qp, *sp; @@ -340,8 +291,8 @@ *qnp = new double[*nvp]; audiodb_l2norm_buffer(*qp, dbH->dim, *nvp, *qnp); - sequence_sum(*qnp, *nvp, sequenceLength); - sequence_sqrt(*qnp, *nvp, sequenceLength); + audiodb_sequence_sum(*qnp, *nvp, sequenceLength); + audiodb_sequence_sqrt(*qnp, *nvp, sequenceLength); if (usingPower) { *qpp = new double[*nvp]; @@ -356,8 +307,8 @@ error("short read", powerFileName); } - sequence_sum(*qpp, *nvp, sequenceLength); - sequence_average(*qpp, *nvp, sequenceLength); + audiodb_sequence_sum(*qpp, *nvp, sequenceLength); + audiodb_sequence_average(*qpp, *nvp, sequenceLength); } if (usingTimes) { @@ -454,15 +405,15 @@ // Copy L2 norm partial-sum coefficients assert(*qnp = new double[*nvp]); memcpy(*qnp, l2normTable+trackIndexOffset, *nvp*sizeof(double)); - sequence_sum(*qnp, *nvp, sequenceLength); - sequence_sqrt(*qnp, *nvp, sequenceLength); + audiodb_sequence_sum(*qnp, *nvp, sequenceLength); + audiodb_sequence_sqrt(*qnp, *nvp, sequenceLength); if( usingPower ){ // Copy Power partial-sum coefficients assert(*qpp = new double[*nvp]); memcpy(*qpp, powerTable+trackIndexOffset, *nvp*sizeof(double)); - sequence_sum(*qpp, *nvp, sequenceLength); - sequence_average(*qpp, *nvp, sequenceLength); + audiodb_sequence_sum(*qpp, *nvp, sequenceLength); + audiodb_sequence_average(*qpp, *nvp, sequenceLength); } if (usingTimes) { @@ -527,12 +478,12 @@ for(unsigned int i = 0; i < dbH->numFiles; i++){ if(trackTable[i] >= sequenceLength) { - sequence_sum(snpp, trackTable[i], sequenceLength); - sequence_sqrt(snpp, trackTable[i], sequenceLength); + audiodb_sequence_sum(snpp, trackTable[i], sequenceLength); + audiodb_sequence_sqrt(snpp, trackTable[i], sequenceLength); if (usingPower) { - sequence_sum(sppp, trackTable[i], sequenceLength); - sequence_average(sppp, trackTable[i], sequenceLength); + audiodb_sequence_sum(sppp, trackTable[i], sequenceLength); + audiodb_sequence_average(sppp, trackTable[i], sequenceLength); } } snpp += trackTable[i];