Mercurial > hg > audiodb
diff query.cpp @ 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 | 2d14d21f826b |
line wrap: on
line diff
--- 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];