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);
|