Mercurial > hg > audiodb
comparison query.cpp @ 405:ef4792df8f93 api-inversion
invert audioDB::insert / audiodb_insert().
Start off by removing audioDB::insertDatum, and essentially reusing it
as audiodb_insert. We now ignore the fact that the command-line parsing
code has "helpfully" opened a std::ifstream for the times file and an fd
for the power file, and simply go ahead and do our own dirty work.
We can delete audioDB::insertDatum entirely, but unfortunately we can't
delete audioDB::insertPowerData and audioDB::insertTimestamps, because
the index and query code respectively use them. Instead, move the two
methods closer to their single uses.
audiodb_insert() is perhaps not as short and simple as it might have
been hoped given the existence of audiodb_insert_datum(); some of that
is C and its terribly way of making you pay every time you use dynamic
memory; some of it is the fact that the three different files (feature,
times, power) each requires slightly different treatment. Hey ho.
We can implement audiodb_batchinsert() in terms of audiodb_insert(); the
function is pleasingly small. We can't quite use it for
audioDB::batchinsert yet, as we have to deal with the O2_FLAG_LARGE_ADB
case (which codepath is untested in libtests/).
This means that we can delete whole swathes of hideous code from
audioDB.cpp, including not just the versions of audiodb_insert() and
audiodb_batchinsert() but also an entire audioDB constructor. Yay.
(audioDB::unitNormAndInsertL2 has also died a deserved death).
author | mas01cr |
---|---|
date | Fri, 05 Dec 2008 22:32:49 +0000 |
parents | 2d5c3f8e8c22 |
children | a7d61291fbda |
comparison
equal
deleted
inserted
replaced
404:1fb8bee777e5 | 405:ef4792df8f93 |
---|---|
238 *data_buffer_p = (double *) tmp; | 238 *data_buffer_p = (double *) tmp; |
239 } | 239 } |
240 } | 240 } |
241 | 241 |
242 CHECKED_READ(trkfid, *data_buffer_p, trackTable[track] * sizeof(double) * dbH->dim); | 242 CHECKED_READ(trkfid, *data_buffer_p, trackTable[track] * sizeof(double) * dbH->dim); |
243 } | |
244 | |
245 void audioDB::insertTimeStamps(unsigned numVectors, std::ifstream *timesFile, double *timesdata) { | |
246 assert(usingTimes); | |
247 | |
248 unsigned numtimes = 0; | |
249 | |
250 if(!timesFile->is_open()) { | |
251 error("problem opening times file on timestamped database", timesFileName); | |
252 } | |
253 | |
254 double timepoint, next; | |
255 *timesFile >> timepoint; | |
256 if (timesFile->eof()) { | |
257 error("no entries in times file", timesFileName); | |
258 } | |
259 numtimes++; | |
260 do { | |
261 *timesFile >> next; | |
262 if (timesFile->eof()) { | |
263 break; | |
264 } | |
265 numtimes++; | |
266 timesdata[0] = timepoint; | |
267 timepoint = (timesdata[1] = next); | |
268 timesdata += 2; | |
269 } while (numtimes < numVectors + 1); | |
270 | |
271 if (numtimes < numVectors + 1) { | |
272 error("too few timepoints in times file", timesFileName); | |
273 } | |
274 | |
275 *timesFile >> next; | |
276 if (!timesFile->eof()) { | |
277 error("too many timepoints in times file", timesFileName); | |
278 } | |
243 } | 279 } |
244 | 280 |
245 // These names deserve some unpicking. The names starting with a "q" | 281 // These names deserve some unpicking. The names starting with a "q" |
246 // are pointers to the query, norm and power vectors; the names | 282 // are pointers to the query, norm and power vectors; the names |
247 // starting with "v" are things that will end up pointing to the | 283 // starting with "v" are things that will end up pointing to the |