annotate audioDB_API.h @ 412:223eda8408e1 api-inversion

Fix the last compiler warning. Bah. A 26-line comment to explain a one-line change will not do any good for the code deletion metric of productivity. However, I have learnt something today: specifically, the arithmetic type conversion rules in C. Wow. I had been beginning to think that C programming wasn't so bad after all: simple, clean semantics, and very little going on under the hood; nothing there to help the programmer, but nothing much to actively get in the way. And then I spend an hour on this.
author mas01cr
date Thu, 11 Dec 2008 17:51:03 +0000
parents ef4792df8f93
children 6e6f4c1cc14d
rev   line source
mas01cr@392 1 #include <stdbool.h>
mas01cr@398 2 #include <stdint.h>
mas01cr@398 3
mas01ik@355 4 /* for API questions contact
mas01ik@355 5 * Christophe Rhodes c.rhodes@gold.ac.uk
mas01ik@355 6 * Ian Knopke mas01ik@gold.ac.uk, ian.knopke@gmail.com */
mas01ik@355 7
mas01cr@392 8 /* Temporary workarounds */
mas01cr@388 9 typedef struct dbTableHeader adb_header_t;
mas01cr@392 10 int acquire_lock(int, bool);
mas01cr@388 11
mas01cr@400 12
mas01cr@401 13 /*******************************************************************/
mas01cr@401 14 /* Data types for API */
mas01cr@400 15
mas01ik@355 16 /* The main struct that stores the name of the database, and in future will hold all
mas01ik@355 17 * kinds of other interesting information */
mas01ik@355 18 /* This basically gets passed around to all of the other functions */
mas01cr@388 19
mas01cr@388 20 /* FIXME: it might be that "adb_" isn't such a good prefix to use, and
mas01cr@388 21 that we should prefer "audiodb_" */
mas01ik@355 22 typedef struct adb adb_t, *adb_ptr;
mas01ik@355 23
mas01cr@404 24 struct adb_datum {
mas01cr@404 25 uint32_t nvectors;
mas01cr@404 26 uint32_t dim;
mas01cr@404 27 const char *key;
mas01cr@404 28 double *data;
mas01cr@404 29 double *power;
mas01cr@404 30 double *times;
mas01cr@404 31 };
mas01cr@404 32 typedef struct adb_datum adb_datum_t;
mas01cr@404 33
mas01ik@355 34 //used for both insert and batchinsert
mas01ik@355 35 struct adbinsert {
mas01cr@405 36 const char *features;
mas01cr@405 37 const char *power;
mas01cr@405 38 const char *key;
mas01cr@405 39 const char *times;
mas01ik@355 40 };
mas01ik@355 41 typedef struct adbinsert adb_insert_t, *adb_insert_ptr;
mas01ik@355 42
mas01ik@355 43 /* struct for returning status results */
mas01ik@355 44 struct adbstatus {
mas01ik@355 45 unsigned int numFiles;
mas01ik@355 46 unsigned int dim;
mas01ik@355 47 unsigned int dudCount;
mas01ik@355 48 unsigned int nullCount;
mas01ik@355 49 unsigned int flags;
mas01cr@398 50 uint64_t length;
mas01cr@398 51 uint64_t data_region_size;
mas01ik@355 52 };
mas01ik@355 53 typedef struct adbstatus adb_status_t, *adb_status_ptr;
mas01ik@355 54
mas01ik@355 55 /* needed for constructing a query */
mas01ik@355 56 struct adbquery {
mas01ik@355 57
mas01ik@355 58 char * querytype;
mas01ik@355 59 char * feature; //usually a file of some kind
mas01ik@355 60 char * power; //also a file
mas01ik@355 61 char * keylist; //also a file
mas01ik@355 62 char * qpoint; //position
mas01ik@355 63 char * numpoints;
mas01ik@355 64 char * radius;
mas01ik@355 65 char * resultlength; //how many results to make
mas01ik@355 66 char * sequencelength;
mas01ik@355 67 char * sequencehop;
mas01ik@355 68 double absolute_threshold;
mas01ik@355 69 double relative_threshold;
mas01ik@355 70 int exhaustive; //hidden option in gengetopt
mas01ik@355 71 double expandfactor; //hidden
mas01ik@355 72 int rotate; //hidden
mas01ik@355 73
mas01ik@355 74 };
mas01ik@355 75 typedef struct adbquery adb_query_t,*adb_query_ptr;
mas01ik@355 76
mas01ik@355 77 /* ... and for getting query results back */
mas01ik@355 78 struct adbqueryresult {
mas01ik@355 79
mas01ik@355 80 int sizeRlist; /* do I really need to return all 4 sizes here */
mas01ik@355 81 int sizeDist;
mas01ik@355 82 int sizeQpos;
mas01ik@355 83 int sizeSpos;
mas01ik@355 84 char **Rlist;
mas01ik@355 85 double *Dist;
mas01ik@355 86 unsigned int *Qpos;
mas01ik@355 87 unsigned int *Spos;
mas01ik@355 88
mas01ik@355 89 };
mas01ik@355 90 typedef struct adbqueryresult adb_queryresult_t, *adb_queryresult_ptr;
mas01ik@355 91
mas01ik@355 92
mas01ik@355 93 /*******************************************************************/
mas01ik@355 94 /* Function prototypes for API */
mas01ik@355 95
mas01ik@355 96
mas01ik@355 97 /* open an existing database */
mas01ik@355 98 /* returns a struct or NULL on failure */
mas01cr@392 99 adb_ptr audiodb_open(const char *path, int flags);
mas01ik@355 100
mas01ik@355 101 /* create a new database */
mas01ik@355 102 /* returns a struct or NULL on failure */
mas01cr@381 103 adb_ptr audiodb_create(const char *path, unsigned datasize, unsigned ntracks, unsigned datadim);
mas01ik@355 104
mas01ik@355 105 /* close a database */
mas01ik@355 106 void audiodb_close(adb_ptr db);
mas01ik@355 107
mas01ik@355 108 /* You'll need to turn both of these on to do anything useful */
mas01ik@355 109 int audiodb_l2norm(adb_ptr mydb);
mas01ik@355 110 int audiodb_power(adb_ptr mydb);
mas01ik@355 111
mas01ik@355 112 /* insert functions */
mas01cr@404 113 int audiodb_insert_datum(adb_t *, adb_datum_t *);
mas01ik@355 114 int audiodb_insert(adb_ptr mydb, adb_insert_ptr ins);
mas01ik@355 115 int audiodb_batchinsert(adb_ptr mydb, adb_insert_ptr ins, unsigned int size);
mas01ik@355 116
mas01ik@355 117 /* query function */
mas01ik@355 118 int audiodb_query(adb_ptr mydb, adb_query_ptr adbq, adb_queryresult_ptr adbqres);
mas01ik@355 119
mas01ik@355 120 /* database status */
mas01ik@355 121 int audiodb_status(adb_ptr mydb, adb_status_ptr status);
mas01ik@355 122
mas01ik@355 123 /* varoius dump formats */
mas01cr@399 124 int audiodb_dump(adb_ptr mydb, const char *outputdir);