mas01ik@355
|
1 /* for API questions contact
|
mas01ik@355
|
2 * Christophe Rhodes c.rhodes@gold.ac.uk
|
mas01ik@355
|
3 * Ian Knopke mas01ik@gold.ac.uk, ian.knopke@gmail.com */
|
mas01ik@355
|
4
|
mas01ik@355
|
5
|
mas01ik@355
|
6 /*******************************************************************/
|
mas01ik@355
|
7 /* Data types for API */
|
mas01ik@355
|
8
|
mas01ik@355
|
9 /* The main struct that stores the name of the database, and in future will hold all
|
mas01ik@355
|
10 * kinds of other interesting information */
|
mas01ik@355
|
11 /* This basically gets passed around to all of the other functions */
|
mas01ik@355
|
12 struct adb {
|
mas01ik@355
|
13
|
mas01ik@355
|
14 char * dbname;
|
mas01ik@355
|
15 unsigned int ntracks; /* number of tracks */
|
mas01ik@355
|
16 unsigned int datadim; /* dimensionality of stored data */
|
mas01ik@355
|
17
|
mas01ik@355
|
18 };
|
mas01ik@355
|
19 typedef struct adb adb_t, *adb_ptr;
|
mas01ik@355
|
20
|
mas01ik@355
|
21 //used for both insert and batchinsert
|
mas01ik@355
|
22 struct adbinsert {
|
mas01ik@355
|
23
|
mas01ik@355
|
24 char * features;
|
mas01ik@355
|
25 char * power;
|
mas01ik@355
|
26 char * key;
|
mas01ik@355
|
27 char * times;
|
mas01ik@355
|
28
|
mas01ik@355
|
29 };
|
mas01ik@355
|
30 typedef struct adbinsert adb_insert_t, *adb_insert_ptr;
|
mas01ik@355
|
31
|
mas01ik@355
|
32 /* struct for returning status results */
|
mas01ik@355
|
33 struct adbstatus {
|
mas01ik@355
|
34
|
mas01ik@355
|
35 unsigned int numFiles;
|
mas01ik@355
|
36 unsigned int dim;
|
mas01ik@355
|
37 unsigned int length;
|
mas01ik@355
|
38 unsigned int dudCount;
|
mas01ik@355
|
39 unsigned int nullCount;
|
mas01ik@355
|
40 unsigned int flags;
|
mas01ik@355
|
41
|
mas01ik@355
|
42 };
|
mas01ik@355
|
43 typedef struct adbstatus adb_status_t, *adb_status_ptr;
|
mas01ik@355
|
44
|
mas01ik@355
|
45 /* needed for constructing a query */
|
mas01ik@355
|
46 struct adbquery {
|
mas01ik@355
|
47
|
mas01ik@355
|
48 char * querytype;
|
mas01ik@355
|
49 char * feature; //usually a file of some kind
|
mas01ik@355
|
50 char * power; //also a file
|
mas01ik@355
|
51 char * keylist; //also a file
|
mas01ik@355
|
52 char * qpoint; //position
|
mas01ik@355
|
53 char * numpoints;
|
mas01ik@355
|
54 char * radius;
|
mas01ik@355
|
55 char * resultlength; //how many results to make
|
mas01ik@355
|
56 char * sequencelength;
|
mas01ik@355
|
57 char * sequencehop;
|
mas01ik@355
|
58 double absolute_threshold;
|
mas01ik@355
|
59 double relative_threshold;
|
mas01ik@355
|
60 int exhaustive; //hidden option in gengetopt
|
mas01ik@355
|
61 double expandfactor; //hidden
|
mas01ik@355
|
62 int rotate; //hidden
|
mas01ik@355
|
63
|
mas01ik@355
|
64 };
|
mas01ik@355
|
65 typedef struct adbquery adb_query_t,*adb_query_ptr;
|
mas01ik@355
|
66
|
mas01ik@355
|
67 /* ... and for getting query results back */
|
mas01ik@355
|
68 struct adbqueryresult {
|
mas01ik@355
|
69
|
mas01ik@355
|
70 int sizeRlist; /* do I really need to return all 4 sizes here */
|
mas01ik@355
|
71 int sizeDist;
|
mas01ik@355
|
72 int sizeQpos;
|
mas01ik@355
|
73 int sizeSpos;
|
mas01ik@355
|
74 char **Rlist;
|
mas01ik@355
|
75 double *Dist;
|
mas01ik@355
|
76 unsigned int *Qpos;
|
mas01ik@355
|
77 unsigned int *Spos;
|
mas01ik@355
|
78
|
mas01ik@355
|
79 };
|
mas01ik@355
|
80 typedef struct adbqueryresult adb_queryresult_t, *adb_queryresult_ptr;
|
mas01ik@355
|
81
|
mas01ik@355
|
82
|
mas01ik@355
|
83 /*******************************************************************/
|
mas01ik@355
|
84 /* Function prototypes for API */
|
mas01ik@355
|
85
|
mas01ik@355
|
86
|
mas01ik@355
|
87 /* open an existing database */
|
mas01ik@355
|
88 /* returns a struct or NULL on failure */
|
mas01ik@355
|
89 adb_ptr audiodb_open(char * path);
|
mas01ik@355
|
90
|
mas01ik@355
|
91 /* create a new database */
|
mas01ik@355
|
92 /* returns a struct or NULL on failure */
|
mas01ik@355
|
93 //adb_ptr audiodb_create(char * path,long ntracks, long datadim);
|
mas01ik@355
|
94 adb_ptr audiodb_create(char * path,long datasize, long ntracks, long datadim);
|
mas01ik@355
|
95
|
mas01ik@355
|
96 /* close a database */
|
mas01ik@355
|
97 void audiodb_close(adb_ptr db);
|
mas01ik@355
|
98
|
mas01ik@355
|
99 /* You'll need to turn both of these on to do anything useful */
|
mas01ik@355
|
100 int audiodb_l2norm(adb_ptr mydb);
|
mas01ik@355
|
101 int audiodb_power(adb_ptr mydb);
|
mas01ik@355
|
102
|
mas01ik@355
|
103 /* insert functions */
|
mas01ik@355
|
104 int audiodb_insert(adb_ptr mydb, adb_insert_ptr ins);
|
mas01ik@355
|
105 int audiodb_batchinsert(adb_ptr mydb, adb_insert_ptr ins, unsigned int size);
|
mas01ik@355
|
106
|
mas01ik@355
|
107 /* query function */
|
mas01ik@355
|
108 int audiodb_query(adb_ptr mydb, adb_query_ptr adbq, adb_queryresult_ptr adbqres);
|
mas01ik@355
|
109
|
mas01ik@355
|
110 /* database status */
|
mas01ik@355
|
111 int audiodb_status(adb_ptr mydb, adb_status_ptr status);
|
mas01ik@355
|
112
|
mas01ik@355
|
113 /* varoius dump formats */
|
mas01ik@355
|
114 int audiodb_dump(adb_ptr mydb);
|
mas01cr@360
|
115 int audiodb_dump_withdir(adb_ptr mydb, const char *outputdir);
|
mas01ik@355
|
116
|
mas01ik@355
|
117
|