Mercurial > hg > audiodb
diff index.cpp @ 320:a995e5ad999a large_adb
working LARGE_ADB support. Activiate at creation time with -N --ntracks 20001 or greater, or with --datasize 1356 or greater, or both. LARGE_ADB blocks non-indexed QUERY.
author | mas01mc |
---|---|
date | Wed, 20 Aug 2008 13:50:58 +0000 |
parents | b9eff6896943 |
children | da2272e029b3 |
line wrap: on
line diff
--- a/index.cpp Tue Aug 19 20:27:15 2008 +0000 +++ b/index.cpp Wed Aug 20 13:50:58 2008 +0000 @@ -119,22 +119,28 @@ /************************ LSH indexing ***********************************/ void audioDB::index_index_db(const char* dbName){ - char* newIndexName; double *fvp = 0, *sNorm = 0, *snPtr = 0, *sPower = 0, *spPtr = 0; Uns32T dbVectors = 0; + printf("INDEX: initializing header\n"); // Check if audioDB exists, initialize header and open database for read forWrite = false; initDBHeader(dbName); + if(dbH->flags & O2_FLAG_POWER) + usingPower = true; + + if(dbH->flags & O2_FLAG_TIMES) + usingTimes = true; + newIndexName = index_get_name(dbName, radius, sequenceLength); // Set unit norming flag override audioDB::normalizedDistance = !audioDB::no_unit_norming; - printf("INDEX: dim %d\n", dbH->dim); + printf("INDEX: dim %d\n", (int)dbH->dim); printf("INDEX: R %f\n", radius); printf("INDEX: seqlen %d\n", sequenceLength); printf("INDEX: lsh_w %f\n", lsh_param_w); @@ -164,12 +170,10 @@ if( endTrack > dbH->numFiles) endTrack = dbH->numFiles; // Insert up to lsh_param_b tracks - if( dbH->flags & O2_FLAG_LARGE_ADB ){ + if( ! (dbH->flags & O2_FLAG_LARGE_ADB) ){ + index_initialize(&sNorm, &snPtr, &sPower, &spPtr, &dbVectors); } - else{ - index_initialize(&sNorm, &snPtr, &sPower, &spPtr, &dbVectors); - index_insert_tracks(0, endTrack, &fvp, &sNorm, &snPtr, &sPower, &spPtr); - } + index_insert_tracks(0, endTrack, &fvp, &sNorm, &snPtr, &sPower, &spPtr); lsh->serialize(newIndexName, lsh_in_core?O2_SERIAL_FILEFORMAT2:O2_SERIAL_FILEFORMAT1); // Clean up @@ -220,14 +224,9 @@ exit(1); } - delete[] newIndexName; - if(sNorm) - delete[] sNorm; - if(sPower) - delete[] sPower; - - + delete[] sNorm; + delete[] sPower; } @@ -258,7 +257,7 @@ if( (statbuf.st_size - sizeof(int)) / (sizeof(double)) != trackTable[trackID] ) error("Dimension mismatch: numPowers != numVectors", powerFileNameTable+trackID*O2_FILETABLE_ENTRY_SIZE); - + *sPowerp = new double[trackTable[trackID]]; // Allocate memory for power values assert(*sPowerp); *spPtrp = *sPowerp; @@ -308,8 +307,8 @@ break; if ( dbH->flags & O2_FLAG_LARGE_ADB ){ close(infid); - delete *sNormpp; - delete *sPowerp; + delete[] *sNormpp; + delete[] *sPowerp; *sNormpp = *sPowerp = *snPtrp = *snPtrp = 0; } } // end for(trackID = start_track ; ... ) @@ -468,7 +467,7 @@ if(lsh!=SERVER_LSH_INDEX_SINGLETON){ if( fabs(radius - lsh->get_radius())>fabs(O2_DISTANCE_TOLERANCE)) printf("*** Warning: adb_radius (%f) != lsh_radius (%f) ***\n", radius, lsh->get_radius()); - printf("INDEX: dim %d\n", dbH->dim); + printf("INDEX: dim %d\n", (int)dbH->dim); printf("INDEX: R %f\n", lsh->get_radius()); printf("INDEX: seqlen %d\n", sequenceLength); printf("INDEX: w %f\n", lsh->get_lshHeader()->get_binWidth()); @@ -531,10 +530,10 @@ // return nqv: if index exists int audioDB::index_query_loop(const char* dbName, Uns32T queryIndex) { - unsigned int numVectors; - double *query, *query_data; - double *qNorm, *qnPtr, *qPower = 0, *qpPtr = 0; - double meanQdur; + unsigned int numVectors = 0; + double *query = 0, *query_data = 0; + double *qNorm = 0, *qnPtr = 0, *qPower = 0, *qpPtr = 0; + double meanQdur = 0; void (*add_point_func)(void*,Uns32T,Uns32T,float); // Set the point-reporter callback based on the value of lsh_exact