annotate audioDB_API.h @ 411:ad2206c24986 api-inversion

Fix a memory corruption bug. When allocating the adb_t in audiodb_open(), zero the memory; then we're not going to try to free() or delete some arbitrary uninitialized thing if the thing that we're opening turns out not to be an audiodb database.
author mas01cr
date Thu, 11 Dec 2008 08:54:06 +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);