# HG changeset patch # User mas01cr # Date 1255443988 0 # Node ID 368c8c72e7231a3da318c5e26a79356315054c86 # Parent 397e94f6db44923f160a9a0b2d3d9f16d26a72c3 Implement sb-adb:liszt in sb-alien bindings Don't forget to export the symbol from the package! Fixes audioDB Trac ticket #33 diff -r 397e94f6db44 -r 368c8c72e723 bindings/sb-alien/interface.lisp --- a/bindings/sb-alien/interface.lisp Tue Oct 13 14:26:27 2009 +0000 +++ b/bindings/sb-alien/interface.lisp Tue Oct 13 14:26:28 2009 +0000 @@ -325,6 +325,16 @@ (setf (slot qdatum 'power) (sb-sys:vector-sap (sb-ext:array-storage-vector (datum-times datum)))) (setf (slot qdatum 'power) nil)))) +(defgeneric liszt (adb)) +(defmethod liszt ((db adb)) + (let ((results (%liszt (slot-value db 'alien)))) + (unwind-protect + (loop for i below (slot results 'nresults) + with entries = (slot results 'entries) + for entry = (deref entries i) + collect (cons (slot entry 'key) (slot entry 'nvectors))) + (%free-liszt-results (slot-value db 'alien) results)))) + #+test (sb-adb:with-adb (db "/home/csr21/tmp/omras2-workshop/9.adb") (sb-adb:query "KSA_CHARM_337" db :exhaustivep t :sequence-length 30 diff -r 397e94f6db44 -r 368c8c72e723 bindings/sb-alien/library.lisp --- a/bindings/sb-alien/library.lisp Tue Oct 13 14:26:27 2009 +0000 +++ b/bindings/sb-alien/library.lisp Tue Oct 13 14:26:28 2009 +0000 @@ -137,5 +137,24 @@ (define-int-checking-function %free-query-results (adb spec results) %%free-query-results) +(define-alien-type adb-track-entry-t + (struct adbtrackentry + (nvectors (unsigned 32)) + (key c-string))) + +(define-alien-type adb-liszt-results-t + (struct adblisztresults + (nresults (unsigned 32)) + (entries (* adb-track-entry-t)))) + +(define-alien-routine ("audiodb_liszt" %%liszt) (* adb-liszt-results-t) + (adb (* adb-t))) +(define-pointer-checking-function %liszt (adb) %%liszt) +(define-alien-routine ("audiodb_liszt_free_results" %%free-liszt-results) int + (adb (* adb-t)) + (results (* adb-liszt-results-t))) +(define-int-checking-function %free-liszt-results (adb results) + %%free-liszt-results) + (define-alien-routine ("audiodb_close" %close) void (adb (* adb-t))) diff -r 397e94f6db44 -r 368c8c72e723 bindings/sb-alien/package.lisp --- a/bindings/sb-alien/package.lisp Tue Oct 13 14:26:27 2009 +0000 +++ b/bindings/sb-alien/package.lisp Tue Oct 13 14:26:28 2009 +0000 @@ -7,5 +7,5 @@ "RESULT" "RESULT-KEY" "RESULT-DISTANCE" "RESULT-QPOS" "RESULT-IPOS" "RESULTS" ;; functions - "OPEN" "CLOSE" "INSERT" "RETRIEVE" "QUERY" ) + "OPEN" "CLOSE" "INSERT" "RETRIEVE" "QUERY" "LISZT") (:shadow "OPEN" "CLOSE"))