Mercurial > hg > audiodb
view audioDBws.h @ 392:78fed0d4c108 api-inversion
Include some necessary information in struct adb.
Now the struct adb contains a database fd, the flags used to open that
fd (so that we can later tell if it was for write or not) and a database
header pointer.
audiodb_open() is now responsible for filling in all of that
information. To do that, it needs to take an open(2) flag; that's good,
because it means that the call to open(2) is no longer invoking
undefined behaviour. (Also, the previous version of audiodb_open()
leaked an fd). Unfortunately, that means we have broken ABI and API
compatibility. (Fortunately, we have fewer than 12 users).
Use audiodb_open() in audioDB::initDBHeader().
We've temporarily(?) put acquire_lock(int, bool) in the API header; that
means we need to include <stdbool.h> and compile C files with -std=c99.
Do so.
Make audiodb_close() free resources allocated by audiodb_open().
Include a struct adb * field in the audioDB C++ object...
... which lets us actually implement memory-correctness, by
audiodb_close()ing the database in audioDB::cleanup().
[ The lock is, I think, correctly disposed of; man fcntl(2) on Linux
says that the locks are released once any file descriptor relating to
the file is closed, and we close the fd in audiodb_close(). ]
author | mas01cr |
---|---|
date | Mon, 24 Nov 2008 15:42:15 +0000 |
parents | 4871a3ed9e36 |
children | add65705e655 |
line wrap: on
line source
// audioDBws.h -- web services interface to audioDB // //FIXME: this hard-coding of the service location might be right for //its internal use at Goldsmiths (for now) but really isn't in //general. Find a way to bind this later (at install time? Or maybe //just require that the installer edit the resulting wsdl file?) // //gsoap adb service location: http://gibbons.doc.gold.ac.uk:20703/ typedef int xsd__int; typedef double xsd__double; typedef char* xsd__string; // Supports result lists of arbitrary length struct adb__queryResult{ int __sizeRlist; char **Rlist; // Maximum size of result list int __sizeDist; double *Dist; int __sizeQpos; unsigned int *Qpos; int __sizeSpos; unsigned int *Spos; }; struct adb__statusResult { unsigned numFiles; unsigned dim; unsigned length; unsigned dudCount; unsigned nullCount; unsigned flags; }; struct adb__statusResponse { struct adb__statusResult result; }; struct adb__queryResponse { struct adb__queryResult result; }; struct adb__lisztResult { int __sizeRkey; char **Rkey; int __sizeRlen; unsigned int *Rlen; }; struct adb__queryVector { int dim; // dimensionality of the feature (d) int __sizev; // l x d : double *v; // pointer to query data int __sizep; double *p; }; struct adb__lisztResponse { struct adb__lisztResult result; }; // Print the status of an existing adb database int adb__status(xsd__string dbName, struct adb__statusResponse &adbStatusResponse); // Print the status of an existing adb database int adb__liszt(xsd__string dbName, xsd__int lisztOffset, xsd__int lisztLength, struct adb__lisztResponse &adbLisztResponse); // Query an existing adb database int adb__query(xsd__string dbName, xsd__string qKey, xsd__string keyList, xsd__string timesFileName, xsd__string powerFileName, xsd__int qType, xsd__int qPos, xsd__int pointNN, xsd__int segNN, xsd__int segLen, xsd__double radius, xsd__double absolute_threshold, xsd__double relative_threshold, xsd__int exhaustive, xsd__int lsh_exact, struct adb__queryResponse &adbQueryResponse); int adb__sequenceQueryByKey(xsd__string dbName,xsd__string trackKey, xsd__string featureFileName, xsd__int queryType,xsd__string trackFileName,xsd__string timesFileName,xsd__int queryPoint,xsd__int pointNN,xsd__int trackNN,xsd__int sequenceLength,xsd__double radius,xsd__double absolute_threshold,xsd__int usingQueryPoint,xsd__int lsh_exact,struct adb__queryResponse &adbQueryResponse); // Query an audioDB database by vector (serialized), queryKey/featureFileName is here replaced with qVector int adb__shingleQuery(xsd__string dbName, struct adb__queryVector qVector, xsd__string keyList, xsd__string timesFileName, xsd__int queryType, xsd__int queryPos, xsd__int pointNN, xsd__int trackNN, xsd__int sequenceLength, xsd__double radius, xsd__double absolute_threshold, xsd__double relative_threshold, xsd__int exhaustive, xsd__int lsh_exact, struct adb__queryResponse &adbQueryResponse);