mas01ik@355: /* for API questions contact mas01ik@355: * Christophe Rhodes c.rhodes@gold.ac.uk mas01ik@355: * Ian Knopke mas01ik@gold.ac.uk, ian.knopke@gmail.com */ mas01ik@355: mas01ik@355: mas01ik@355: /*******************************************************************/ mas01ik@355: /* Data types for API */ mas01ik@355: mas01ik@355: /* The main struct that stores the name of the database, and in future will hold all mas01ik@355: * kinds of other interesting information */ mas01ik@355: /* This basically gets passed around to all of the other functions */ mas01ik@355: struct adb { mas01ik@355: mas01ik@355: char * dbname; mas01ik@355: unsigned int ntracks; /* number of tracks */ mas01ik@355: unsigned int datadim; /* dimensionality of stored data */ mas01ik@355: mas01ik@355: }; mas01ik@355: typedef struct adb adb_t, *adb_ptr; mas01ik@355: mas01ik@355: //used for both insert and batchinsert mas01ik@355: struct adbinsert { mas01ik@355: mas01ik@355: char * features; mas01ik@355: char * power; mas01ik@355: char * key; mas01ik@355: char * times; mas01ik@355: mas01ik@355: }; mas01ik@355: typedef struct adbinsert adb_insert_t, *adb_insert_ptr; mas01ik@355: mas01ik@355: /* struct for returning status results */ mas01ik@355: struct adbstatus { mas01ik@355: mas01ik@355: unsigned int numFiles; mas01ik@355: unsigned int dim; mas01ik@355: unsigned int length; mas01ik@355: unsigned int dudCount; mas01ik@355: unsigned int nullCount; mas01ik@355: unsigned int flags; mas01ik@355: mas01ik@355: }; mas01ik@355: typedef struct adbstatus adb_status_t, *adb_status_ptr; mas01ik@355: mas01ik@355: /* needed for constructing a query */ mas01ik@355: struct adbquery { mas01ik@355: mas01ik@355: char * querytype; mas01ik@355: char * feature; //usually a file of some kind mas01ik@355: char * power; //also a file mas01ik@355: char * keylist; //also a file mas01ik@355: char * qpoint; //position mas01ik@355: char * numpoints; mas01ik@355: char * radius; mas01ik@355: char * resultlength; //how many results to make mas01ik@355: char * sequencelength; mas01ik@355: char * sequencehop; mas01ik@355: double absolute_threshold; mas01ik@355: double relative_threshold; mas01ik@355: int exhaustive; //hidden option in gengetopt mas01ik@355: double expandfactor; //hidden mas01ik@355: int rotate; //hidden mas01ik@355: mas01ik@355: }; mas01ik@355: typedef struct adbquery adb_query_t,*adb_query_ptr; mas01ik@355: mas01ik@355: /* ... and for getting query results back */ mas01ik@355: struct adbqueryresult { mas01ik@355: mas01ik@355: int sizeRlist; /* do I really need to return all 4 sizes here */ mas01ik@355: int sizeDist; mas01ik@355: int sizeQpos; mas01ik@355: int sizeSpos; mas01ik@355: char **Rlist; mas01ik@355: double *Dist; mas01ik@355: unsigned int *Qpos; mas01ik@355: unsigned int *Spos; mas01ik@355: mas01ik@355: }; mas01ik@355: typedef struct adbqueryresult adb_queryresult_t, *adb_queryresult_ptr; mas01ik@355: mas01ik@355: mas01ik@355: /*******************************************************************/ mas01ik@355: /* Function prototypes for API */ mas01ik@355: mas01ik@355: mas01ik@355: /* open an existing database */ mas01ik@355: /* returns a struct or NULL on failure */ mas01ik@355: adb_ptr audiodb_open(char * path); mas01ik@355: mas01ik@355: /* create a new database */ mas01ik@355: /* returns a struct or NULL on failure */ mas01ik@355: //adb_ptr audiodb_create(char * path,long ntracks, long datadim); mas01ik@355: adb_ptr audiodb_create(char * path,long datasize, long ntracks, long datadim); mas01ik@355: mas01ik@355: /* close a database */ mas01ik@355: void audiodb_close(adb_ptr db); mas01ik@355: mas01ik@355: /* You'll need to turn both of these on to do anything useful */ mas01ik@355: int audiodb_l2norm(adb_ptr mydb); mas01ik@355: int audiodb_power(adb_ptr mydb); mas01ik@355: mas01ik@355: /* insert functions */ mas01ik@355: int audiodb_insert(adb_ptr mydb, adb_insert_ptr ins); mas01ik@355: int audiodb_batchinsert(adb_ptr mydb, adb_insert_ptr ins, unsigned int size); mas01ik@355: mas01ik@355: /* query function */ mas01ik@355: int audiodb_query(adb_ptr mydb, adb_query_ptr adbq, adb_queryresult_ptr adbqres); mas01ik@355: mas01ik@355: /* database status */ mas01ik@355: int audiodb_status(adb_ptr mydb, adb_status_ptr status); mas01ik@355: mas01ik@355: /* varoius dump formats */ mas01ik@355: int audiodb_dump(adb_ptr mydb); mas01cr@360: int audiodb_dump_withdir(adb_ptr mydb, const char *outputdir); mas01ik@355: mas01ik@355: