Mercurial > hg > audiodb
changeset 222:4a66c326bbf1 refactoring
Move usingQueryPoint logic into set_up_query()
(And a similar change to set_up_db(). This causes the arglists to look
quite hairy, but I forgive myself because they're internal-use only.)
author | mas01cr |
---|---|
date | Wed, 05 Dec 2007 12:47:33 +0000 |
parents | b67fd44ce667 |
children | e2e561eef3d6 |
files | audioDB.h query.cpp |
diffstat | 2 files changed, 36 insertions(+), 48 deletions(-) [+] |
line wrap: on
line diff
--- a/audioDB.h Wed Dec 05 12:14:00 2007 +0000 +++ b/audioDB.h Wed Dec 05 12:47:33 2007 +0000 @@ -196,8 +196,8 @@ 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); void read_data(int track, double **data_buffer_p, size_t *data_buffer_size_p); - void set_up_query(double **qp, double **qnp, double **qpp, double *mqdp, unsigned int *nvp); - void set_up_db(double **snp, double **spp, double **mddp, unsigned int *dvp); + void set_up_query(double **qp, double **vqp, double **qnp, double **vqnp, double **qpp, double **vqpp, double *mqdp, unsigned int *nvp); + void set_up_db(double **snp, double **vsnp, double **spp, double **vspp, double **mddp, unsigned int *dvp); void trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0); void trackSequenceQueryRad(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0);
--- a/query.cpp Wed Dec 05 12:14:00 2007 +0000 +++ b/query.cpp Wed Dec 05 12:47:33 2007 +0000 @@ -167,7 +167,11 @@ read(dbfid, *data_buffer_p, trackTable[track] * sizeof(double) * dbH->dim); } -void audioDB::set_up_query(double **qp, double **qnp, double **qpp, double *mqdp, unsigned *nvp) { +// These names deserve some unpicking. The names starting with a "q" +// are pointers to the query, norm and power vectors; the names +// starting with "v" are things that will end up pointing to the +// actual query point's information. -- CSR, 2007-12-05 +void audioDB::set_up_query(double **qp, double **vqp, double **qnp, double **vqnp, double **qpp, double **vqpp, double *mqdp, unsigned *nvp) { *nvp = (statbuf.st_size - sizeof(int)) / (dbH->dim * sizeof(double)); if(!(dbH->flags & O2_FLAG_L2NORM)) { @@ -224,12 +228,33 @@ delete [] querydurs; delete [] timesdata; } + + // Defaults, for exhaustive search (!usingQueryPoint) + *vqp = *qp; + *vqnp = *qnp; + *vqpp = *qpp; + + if(usingQueryPoint) { + if(queryPoint > *nvp || queryPoint > *nvp - sequenceLength + 1) { + error("queryPoint > numVectors-wL+1 in query"); + } else { + if(verbosity>1) { + std::cerr << "query point: " << queryPoint << std::endl; std::cerr.flush(); + } + *vqp = *qp + queryPoint * dbH->dim; + *vqnp = *qnp + queryPoint; + if (usingPower) { + *vqpp = *qpp + queryPoint; + } + *nvp = sequenceLength; + } + } } // FIXME: this is not the right name; we're not actually setting up // the database, but copying various bits of it out of mmap()ed tables // in order to reduce seeks. -void audioDB::set_up_db(double **snp, double **spp, double **mddp, unsigned int *dvp) { +void audioDB::set_up_db(double **snp, double **vsnp, double **spp, double **vspp, double **mddp, unsigned int *dvp) { *dvp = dbH->length / (dbH->dim * sizeof(double)); *snp = new double[*dvp]; @@ -277,6 +302,9 @@ (*mddp)[k] /= j; } } + + *vsnp = *snp; + *vspp = *spp; } void audioDB::trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse){ @@ -288,18 +316,13 @@ double *qNorm, *qnPtr, *qPower = 0, *qpPtr = 0; double meanQdur; - set_up_query(&query, &qNorm, &qPower, &meanQdur, &numVectors); - query_data = query; - qpPtr = qPower; - qnPtr = qNorm; + set_up_query(&query_data, &query, &qNorm, &qnPtr, &qPower, &qpPtr, &meanQdur, &numVectors); unsigned int dbVectors; double *sNorm, *snPtr, *sPower = 0, *spPtr = 0; double *meanDBdur = 0; - set_up_db(&sNorm, &sPower, &meanDBdur, &dbVectors); - spPtr = sPower; - snPtr = sNorm; + set_up_db(&sNorm, &snPtr, &sPower, &spPtr, &meanDBdur, &dbVectors); if(verbosity>1) { std::cerr << "matching tracks..." << std::endl; @@ -334,21 +357,6 @@ trackIDs[k]=~0; } - if(usingQueryPoint) - if(queryPoint>numVectors || queryPoint>numVectors-wL+1) - error("queryPoint > numVectors-wL+1 in query"); - else{ - if(verbosity>1) { - std::cerr << "query point: " << queryPoint << std::endl; std::cerr.flush(); - } - query = query + queryPoint * dbH->dim; - qnPtr = qnPtr + queryPoint; - if (usingPower) { - qpPtr = qpPtr + queryPoint; - } - numVectors=wL; - } - double ** D = 0; // Differences query and target double ** DD = 0; // Matched filter distance @@ -588,18 +596,13 @@ double *qNorm, *qnPtr, *qPower = 0, *qpPtr = 0; double meanQdur; - set_up_query(&query, &qNorm, &qPower, &meanQdur, &numVectors); - query_data = query; - qpPtr = qPower; - qnPtr = qNorm; + set_up_query(&query_data, &query, &qNorm, &qnPtr, &qPower, &qpPtr, &meanQdur, &numVectors); unsigned int dbVectors; double *sNorm, *snPtr, *sPower = 0, *spPtr = 0; double *meanDBdur = 0; - set_up_db(&sNorm, &sPower, &meanDBdur, &dbVectors); - spPtr = sPower; - snPtr = sNorm; + set_up_db(&sNorm, &snPtr, &sPower, &spPtr, &meanDBdur, &dbVectors); if(verbosity>1) { std::cerr << "matching tracks..." << std::endl; @@ -636,21 +639,6 @@ trackIDs[k]=~0; } - if(usingQueryPoint) - if(queryPoint>numVectors || queryPoint>numVectors-wL+1) - error("queryPoint > numVectors-wL+1 in query"); - else{ - if(verbosity>1) { - std::cerr << "query point: " << queryPoint << std::endl; std::cerr.flush(); - } - query = query + queryPoint*dbH->dim; - qnPtr = qnPtr + queryPoint; - if (usingPower) { - qpPtr = qpPtr + queryPoint; - } - numVectors=wL; - } - double ** D = 0; // Differences query and target double ** DD = 0; // Matched filter distance