Mercurial > hg > audiodb
diff query.cpp @ 546:e8193805ce42 multiprobeLSH
Rework new audiodb_track_id_datum_offset() and audiodb_insert_create_datum_offset() so that all offsets are in num_vectors. Internals of data storage are left the the methods to implement. If we are going to export these methods to the API, how do we expose the cache ? It needs to be passed back to the user and back in by the user on each call for caching to be re-entrant. No (intentional) functional changes this version.
author | mas01mc |
---|---|
date | Sun, 08 Feb 2009 22:32:33 +0000 |
parents | bf89c80ec4cc |
children |
line wrap: on
line diff
--- a/query.cpp Sun Feb 08 15:53:57 2009 +0000 +++ b/query.cpp Sun Feb 08 22:32:33 2009 +0000 @@ -203,31 +203,35 @@ } int audiodb_track_id_datum_offset(adb_t *adb, uint32_t track_id, adb_datum_t *d, off_t vector_offset, size_t num_vectors, adb_fd_cache_t* cache){ - off_t track_offset = (*adb->track_offsets)[track_id]; - if(adb->header->flags & ADB_HEADER_FLAG_REFERENCES) { /* create a reference/insert, then use adb_insert_create_datum() */ adb_reference_t *reference = NULL; if(! (cache && cache->reference) ){ reference = (adb_reference_t *) malloc(sizeof(adb_reference_t)); reference->features = (char*) malloc(ADB_MAXSTR*sizeof(char)); - if(adb->header->flags & ADB_HEADER_FLAG_POWER) + if(adb->header->flags & ADB_HEADER_FLAG_POWER) { reference->power = (char*) malloc(ADB_MAXSTR*sizeof(char)); - else + } + else{ reference->power = NULL; - if(adb->header->flags & ADB_HEADER_FLAG_TIMES) + } + if(adb->header->flags & ADB_HEADER_FLAG_TIMES){ reference->times = (char*)malloc(ADB_MAXSTR*sizeof(char)); - else + } + else{ reference->times = NULL; - if(cache) + } + if(cache){ cache->reference = reference; + } } - else + else{ reference = cache->reference; - + } if(! (cache && cache->track_id==track_id) ){ - if(cache) + if(cache){ cache->track_id = track_id; + } lseek(adb->fd, adb->header->dataOffset + track_id * ADB_FILETABLE_ENTRY_SIZE, SEEK_SET); read_or_goto_error(adb->fd, (void *)reference->features, ADB_MAXSTR); if(adb->header->flags & ADB_HEADER_FLAG_POWER) { @@ -239,14 +243,15 @@ read_or_goto_error(adb->fd, (void *)reference->times, ADB_MAXSTR); } } - - int retval = audiodb_insert_create_datum_offset(reference, d, vector_offset*adb->header->dim*sizeof(double), num_vectors*adb->header->dim*sizeof(double), cache); + int retval = audiodb_insert_create_datum_offset(reference, d, vector_offset, num_vectors, cache); if(!cache){ audiodb_free_datum_reference(reference); free(reference); } return retval; - } else { + } + else { + off_t track_offset = (*adb->track_offsets)[track_id]; /* initialize from sources of data that we already have */ if(num_vectors) d->nvectors = num_vectors;