annotate bindings/sb-alien/library.lisp @ 529:e532666226bc multiprobeLSH

Fixed a problem with inserting into exact_evaluation_queue, duplicate pairs were being inserted when querying multiple hashtables. That is now fixed by adding a unique constraint using set<PointPair> inserts and testing. This should speed things up quite a bit (like, 10-fold with default num tables).
author mas01mc
date Fri, 30 Jan 2009 14:58:35 +0000
parents 3141e51cb077
children 633614461994
rev   line source
mas01cr@511 1 (in-package "SB-ADB")
mas01cr@511 2
mas01cr@511 3 (defmacro define-int-checking-function (name arglist llname)
mas01cr@511 4 `(defun ,name ,arglist
mas01cr@511 5 (let ((result (,llname ,@arglist)))
mas01cr@511 6 (unless (eql 0 result)
mas01cr@511 7 (error "~S on ~{~S ~}failed." ',name (list ,@arglist))))))
mas01cr@511 8
mas01cr@511 9 (defmacro define-pointer-checking-function (name arglist llname)
mas01cr@511 10 `(defun ,name ,arglist
mas01cr@511 11 (let ((result (,llname ,@arglist)))
mas01cr@511 12 (when (null-alien result)
mas01cr@511 13 (error "~S on ~{~S ~}failed." ',name (list ,@arglist)))
mas01cr@511 14 result)))
mas01cr@511 15
mas01cr@511 16 (define-alien-type adb-t
mas01cr@511 17 (struct adb))
mas01cr@511 18
mas01cr@511 19 (define-alien-routine ("audiodb_open" %%open) (* adb-t)
mas01cr@511 20 (path c-string)
mas01cr@511 21 (flags int))
mas01cr@511 22 (define-pointer-checking-function %open (path flags) %%open)
mas01cr@511 23
mas01cr@511 24 (define-alien-routine ("audiodb_create" %%create) (* adb-t)
mas01cr@511 25 (path c-string)
mas01cr@511 26 (datasize (unsigned 32))
mas01cr@511 27 (ntracks (unsigned 32))
mas01cr@511 28 (datadim (unsigned 32)))
mas01cr@511 29 (define-pointer-checking-function %create (path datasize ntracks datadim)
mas01cr@511 30 %%create)
mas01cr@511 31
mas01cr@511 32 (define-alien-routine ("audiodb_l2norm" %%l2norm) int
mas01cr@511 33 (adb (* adb-t)))
mas01cr@511 34 (define-int-checking-function %l2norm (adb) %%l2norm)
mas01cr@511 35
mas01cr@511 36 (define-alien-routine ("audiodb_power" %%power) int
mas01cr@511 37 (adb (* adb-t)))
mas01cr@511 38 (define-int-checking-function %power (adb) %%power)
mas01cr@511 39
mas01cr@511 40 (define-alien-type adb-datum-t
mas01cr@511 41 (struct adb-datum
mas01cr@511 42 (nvectors (unsigned 32))
mas01cr@511 43 (dim (unsigned 32))
mas01cr@511 44 (key c-string)
mas01cr@511 45 (data (* double))
mas01cr@511 46 (power (* double))
mas01cr@511 47 (times (* double))))
mas01cr@511 48
mas01cr@511 49 (define-alien-routine ("audiodb_insert_datum" %%insert-datum) int
mas01cr@511 50 (adb (* adb-t))
mas01cr@511 51 (datum (* adb-datum-t)))
mas01cr@511 52 (define-int-checking-function %insert-datum (adb datum) %%insert-datum)
mas01cr@511 53
mas01cr@511 54 (define-alien-type adb-status-t
mas01cr@511 55 (struct adb-status
mas01cr@511 56 (nfiles (unsigned 32))
mas01cr@511 57 (dim (unsigned 32))
mas01cr@511 58 (ignore1 (unsigned 32))
mas01cr@511 59 (ignore2 (unsigned 32))
mas01cr@511 60 (flags (unsigned 32))
mas01cr@511 61 (length (unsigned 64))
mas01cr@511 62 (data-region-size (unsigned 64))))
mas01cr@511 63
mas01cr@511 64 (define-alien-routine ("audiodb_status" %%status) int
mas01cr@511 65 (adb (* adb-t))
mas01cr@511 66 (status (* adb-status-t)))
mas01cr@511 67 (define-int-checking-function %status (adb datum) %%status)
mas01cr@511 68
mas01cr@511 69 (define-alien-type adb-query-id-t
mas01cr@511 70 (struct adbqueryid
mas01cr@511 71 (datum (* adb-datum-t))
mas01cr@511 72 (sequence-length (unsigned 32))
mas01cr@511 73 (flags (unsigned 32))
mas01cr@511 74 (sequence-start (unsigned 32))))
mas01cr@511 75
mas01cr@511 76 (define-alien-type adb-query-parameters-t
mas01cr@511 77 (struct adbqueryparameters
mas01cr@511 78 (accumulation (unsigned 32))
mas01cr@511 79 (distance (unsigned 32))
mas01cr@511 80 (npoints (unsigned 32))
mas01cr@511 81 (ntracks (unsigned 32))))
mas01cr@511 82
mas01cr@511 83 (define-alien-type adb-keylist-t
mas01cr@511 84 (struct adbkeylist
mas01cr@511 85 (nkeys (unsigned 32))
mas01cr@511 86 (keys (* c-string))))
mas01cr@511 87
mas01cr@511 88 (define-alien-type adb-query-refine-t
mas01cr@511 89 (struct adbqueryrefine
mas01cr@511 90 (flags (unsigned 32))
mas01cr@511 91 (include adb-keylist-t)
mas01cr@511 92 (exclude adb-keylist-t)
mas01cr@511 93 (radius double)
mas01cr@511 94 (absolute-threshold double)
mas01cr@511 95 (relative-threshold double)
mas01cr@511 96 (duration-ratio double)
mas01cr@511 97 (hopsize (unsigned 32))))
mas01cr@511 98
mas01cr@511 99 (define-alien-type adb-query-spec-t
mas01cr@511 100 (struct adbqueryspec
mas01cr@511 101 (qid adb-query-id-t)
mas01cr@511 102 (params adb-query-parameters-t)
mas01cr@511 103 (refine adb-query-refine-t)))
mas01cr@511 104
mas01cr@511 105 (define-alien-type adb-result-t
mas01cr@511 106 (struct adbresult
mas01cr@511 107 (key c-string)
mas01cr@511 108 (dist double)
mas01cr@511 109 (qpos (unsigned 32))
mas01cr@511 110 (ipos (unsigned 32))))
mas01cr@511 111
mas01cr@511 112 (define-alien-type adb-query-results-t
mas01cr@511 113 (struct adbqueryresults
mas01cr@511 114 (nresults (unsigned 32))
mas01cr@511 115 (results (* adb-result-t))))
mas01cr@511 116
mas01cr@511 117 (define-alien-routine ("audiodb_query_spec" %%query) (* adb-query-results-t)
mas01cr@511 118 (adb (* adb-t))
mas01cr@511 119 (spec (* adb-query-spec-t)))
mas01cr@511 120 (define-pointer-checking-function %query (adb spec) %%query)
mas01cr@511 121
mas01cr@511 122 (define-alien-routine ("audiodb_query_free_results" %%free-query-results) int
mas01cr@511 123 (adb (* adb-t))
mas01cr@511 124 (spec (* adb-query-spec-t))
mas01cr@511 125 (results (* adb-query-results-t)))
mas01cr@511 126 (define-int-checking-function %free-query-results (adb spec results)
mas01cr@511 127 %%free-query-results)
mas01cr@511 128
mas01cr@511 129 (define-alien-routine ("audiodb_close" %close) void
mas01cr@511 130 (adb (* adb-t)))