mas01cr@511: (in-package "SB-ADB") mas01cr@511: mas01cr@511: (defmacro define-int-checking-function (name arglist llname) mas01cr@511: `(defun ,name ,arglist mas01cr@511: (let ((result (,llname ,@arglist))) mas01cr@511: (unless (eql 0 result) mas01cr@511: (error "~S on ~{~S ~}failed." ',name (list ,@arglist)))))) mas01cr@511: mas01cr@511: (defmacro define-pointer-checking-function (name arglist llname) mas01cr@511: `(defun ,name ,arglist mas01cr@511: (let ((result (,llname ,@arglist))) mas01cr@511: (when (null-alien result) mas01cr@511: (error "~S on ~{~S ~}failed." ',name (list ,@arglist))) mas01cr@511: result))) mas01cr@511: mas01cr@511: (define-alien-type adb-t mas01cr@511: (struct adb)) mas01cr@511: mas01cr@511: (define-alien-routine ("audiodb_open" %%open) (* adb-t) mas01cr@511: (path c-string) mas01cr@511: (flags int)) mas01cr@511: (define-pointer-checking-function %open (path flags) %%open) mas01cr@511: mas01cr@511: (define-alien-routine ("audiodb_create" %%create) (* adb-t) mas01cr@511: (path c-string) mas01cr@511: (datasize (unsigned 32)) mas01cr@511: (ntracks (unsigned 32)) mas01cr@511: (datadim (unsigned 32))) mas01cr@511: (define-pointer-checking-function %create (path datasize ntracks datadim) mas01cr@511: %%create) mas01cr@511: mas01cr@511: (define-alien-routine ("audiodb_l2norm" %%l2norm) int mas01cr@511: (adb (* adb-t))) mas01cr@511: (define-int-checking-function %l2norm (adb) %%l2norm) mas01cr@511: mas01cr@511: (define-alien-routine ("audiodb_power" %%power) int mas01cr@511: (adb (* adb-t))) mas01cr@511: (define-int-checking-function %power (adb) %%power) mas01cr@511: mas01cr@511: (define-alien-type adb-datum-t mas01cr@511: (struct adb-datum mas01cr@511: (nvectors (unsigned 32)) mas01cr@511: (dim (unsigned 32)) mas01cr@511: (key c-string) mas01cr@511: (data (* double)) mas01cr@511: (power (* double)) mas01cr@511: (times (* double)))) mas01cr@511: mas01cr@511: (define-alien-routine ("audiodb_insert_datum" %%insert-datum) int mas01cr@511: (adb (* adb-t)) mas01cr@511: (datum (* adb-datum-t))) mas01cr@511: (define-int-checking-function %insert-datum (adb datum) %%insert-datum) mas01cr@511: mas01cr@511: (define-alien-type adb-status-t mas01cr@511: (struct adb-status mas01cr@511: (nfiles (unsigned 32)) mas01cr@511: (dim (unsigned 32)) mas01cr@511: (ignore1 (unsigned 32)) mas01cr@511: (ignore2 (unsigned 32)) mas01cr@511: (flags (unsigned 32)) mas01cr@511: (length (unsigned 64)) mas01cr@511: (data-region-size (unsigned 64)))) mas01cr@511: mas01cr@511: (define-alien-routine ("audiodb_status" %%status) int mas01cr@511: (adb (* adb-t)) mas01cr@511: (status (* adb-status-t))) mas01cr@511: (define-int-checking-function %status (adb datum) %%status) mas01cr@511: mas01cr@511: (define-alien-type adb-query-id-t mas01cr@511: (struct adbqueryid mas01cr@511: (datum (* adb-datum-t)) mas01cr@511: (sequence-length (unsigned 32)) mas01cr@511: (flags (unsigned 32)) mas01cr@511: (sequence-start (unsigned 32)))) mas01cr@511: mas01cr@511: (define-alien-type adb-query-parameters-t mas01cr@511: (struct adbqueryparameters mas01cr@511: (accumulation (unsigned 32)) mas01cr@511: (distance (unsigned 32)) mas01cr@511: (npoints (unsigned 32)) mas01cr@511: (ntracks (unsigned 32)))) mas01cr@511: mas01cr@511: (define-alien-type adb-keylist-t mas01cr@511: (struct adbkeylist mas01cr@511: (nkeys (unsigned 32)) mas01cr@511: (keys (* c-string)))) mas01cr@511: mas01cr@511: (define-alien-type adb-query-refine-t mas01cr@511: (struct adbqueryrefine mas01cr@511: (flags (unsigned 32)) mas01cr@511: (include adb-keylist-t) mas01cr@511: (exclude adb-keylist-t) mas01cr@511: (radius double) mas01cr@511: (absolute-threshold double) mas01cr@511: (relative-threshold double) mas01cr@511: (duration-ratio double) mas01cr@511: (hopsize (unsigned 32)))) mas01cr@511: mas01cr@511: (define-alien-type adb-query-spec-t mas01cr@511: (struct adbqueryspec mas01cr@511: (qid adb-query-id-t) mas01cr@511: (params adb-query-parameters-t) mas01cr@511: (refine adb-query-refine-t))) mas01cr@511: mas01cr@511: (define-alien-type adb-result-t mas01cr@511: (struct adbresult mas01cr@511: (key c-string) mas01cr@511: (dist double) mas01cr@511: (qpos (unsigned 32)) mas01cr@511: (ipos (unsigned 32)))) mas01cr@511: mas01cr@511: (define-alien-type adb-query-results-t mas01cr@511: (struct adbqueryresults mas01cr@511: (nresults (unsigned 32)) mas01cr@511: (results (* adb-result-t)))) mas01cr@511: mas01cr@511: (define-alien-routine ("audiodb_query_spec" %%query) (* adb-query-results-t) mas01cr@511: (adb (* adb-t)) mas01cr@511: (spec (* adb-query-spec-t))) mas01cr@511: (define-pointer-checking-function %query (adb spec) %%query) mas01cr@511: mas01cr@511: (define-alien-routine ("audiodb_query_free_results" %%free-query-results) int mas01cr@511: (adb (* adb-t)) mas01cr@511: (spec (* adb-query-spec-t)) mas01cr@511: (results (* adb-query-results-t))) mas01cr@511: (define-int-checking-function %free-query-results (adb spec results) mas01cr@511: %%free-query-results) mas01cr@511: mas01cr@511: (define-alien-routine ("audiodb_close" %close) void mas01cr@511: (adb (* adb-t)))