Mercurial > hg > audiodb
annotate status.cpp @ 580:633614461994
API for retrieving a track's data.
A new function, audiodb_retrieve_datum() fills a provided adb_datum_t
structure with the data corresponding to a given database key; the
companion audiodb_free_datum() function frees the data in a given datum
appropriately.
Just in case, I continue to require passing in the adb_t * as the first
argument to audiodb_free_datum(), even though it's not currently used:
I couldn't convince myself that _all_ possible implementations could
free a datum without reference to the adb_t.
This meant rewriting the internal code to use a new internal
audiodb_really_free_datum() function, which audiodb_free_datum() also
calls.
Sanity-checked by implementing a binding in sb-alien to this function,
lightly-tested.
All this fixes ticket:20 in Trac.
author | mas01cr |
---|---|
date | Tue, 14 Jul 2009 15:35:36 +0000 |
parents | cc2b97d020b1 |
children |
rev | line source |
---|---|
mas01cr@498 | 1 extern "C" { |
mas01cr@498 | 2 #include "audioDB_API.h" |
mas01cr@509 | 3 } |
mas01cr@498 | 4 #include "audioDB-internals.h" |
mas01cr@498 | 5 |
mas01cr@498 | 6 int audiodb_status(adb_t *adb, adb_status_t *status) { |
mas01cr@498 | 7 /* FIXME: it would be nice to be able to test for "is this database |
mas01cr@498 | 8 pointer valid", but at the moment we punt that to memory |
mas01cr@498 | 9 discipline. */ |
mas01cr@498 | 10 |
mas01cr@498 | 11 unsigned dudCount = 0; |
mas01cr@498 | 12 unsigned nullCount = 0; |
mas01cr@498 | 13 |
mas01cr@498 | 14 for(unsigned k = 0; k < adb->header->numFiles; k++) { |
mas01cr@498 | 15 /* FIXME: this bare "16" here reveals a problem (or maybe two). |
mas01cr@498 | 16 * 16 here means the default value of the sequenceLength parameter |
mas01cr@498 | 17 * initializer (both in C++ and corresponding to the "-l" or |
mas01cr@498 | 18 * "--sequencelength" command-line argument). |
mas01cr@498 | 19 * |
mas01cr@498 | 20 * The problem is that the API as currently designed provides no |
mas01cr@498 | 21 * way to pass that information in to this routine; there's no |
mas01cr@498 | 22 * input parameter; nor is there in the SOAP version of this |
mas01cr@498 | 23 * query. However, there /is/ a way to pass that information on |
mas01cr@498 | 24 * the command-line -- though that codepath is completely |
mas01cr@498 | 25 * untested. I can see that it might be useful to provide this |
mas01cr@498 | 26 * information, but at present it's probably completely unused, so |
mas01cr@498 | 27 * the compromise for now is to hardwire the 16. |
mas01cr@498 | 28 */ |
mas01cr@498 | 29 if((*adb->track_lengths)[k] < 16) { |
mas01cr@498 | 30 dudCount++; |
mas01cr@498 | 31 if(!(*adb->track_lengths)[k]) { |
mas01cr@498 | 32 nullCount++; |
mas01cr@498 | 33 } |
mas01cr@498 | 34 } |
mas01cr@498 | 35 } |
mas01cr@498 | 36 |
mas01cr@498 | 37 status->numFiles = adb->header->numFiles; |
mas01cr@498 | 38 status->dim = adb->header->dim; |
mas01cr@498 | 39 status->length = adb->header->length; |
mas01cr@498 | 40 status->dudCount = dudCount; |
mas01cr@498 | 41 status->nullCount = nullCount; |
mas01cr@498 | 42 status->flags = adb->header->flags; |
mas01cr@498 | 43 status->data_region_size = adb->header->timesTableOffset - adb->header->dataOffset; |
mas01cr@498 | 44 |
mas01cr@498 | 45 return 0; |
mas01cr@498 | 46 } |
mas01cr@498 | 47 |