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@633
|
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@633
|
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@580
|
54 (define-alien-routine ("audiodb_retrieve_datum" %%retrieve-datum) int
|
mas01cr@580
|
55 (adb (* adb-t))
|
mas01cr@580
|
56 (key c-string)
|
mas01cr@580
|
57 (datum (* adb-datum-t)))
|
mas01cr@580
|
58 (define-int-checking-function %retrieve-datum (adb key datum) %%retrieve-datum)
|
mas01cr@580
|
59
|
mas01cr@580
|
60 (define-alien-routine ("audiodb_free_datum" %%free-datum) int
|
mas01cr@580
|
61 (adb (* adb-t))
|
mas01cr@580
|
62 (datum (* adb-datum-t)))
|
mas01cr@580
|
63 (define-int-checking-function %free-datum (adb datum) %%free-datum)
|
mas01cr@580
|
64
|
mas01cr@511
|
65 (define-alien-type adb-status-t
|
mas01cr@511
|
66 (struct adb-status
|
mas01cr@511
|
67 (nfiles (unsigned 32))
|
mas01cr@511
|
68 (dim (unsigned 32))
|
mas01cr@511
|
69 (ignore1 (unsigned 32))
|
mas01cr@511
|
70 (ignore2 (unsigned 32))
|
mas01cr@511
|
71 (flags (unsigned 32))
|
mas01cr@511
|
72 (length (unsigned 64))
|
mas01cr@511
|
73 (data-region-size (unsigned 64))))
|
mas01cr@511
|
74
|
mas01cr@511
|
75 (define-alien-routine ("audiodb_status" %%status) int
|
mas01cr@511
|
76 (adb (* adb-t))
|
mas01cr@511
|
77 (status (* adb-status-t)))
|
mas01cr@511
|
78 (define-int-checking-function %status (adb datum) %%status)
|
mas01cr@511
|
79
|
mas01cr@511
|
80 (define-alien-type adb-query-id-t
|
mas01cr@673
|
81 (struct adb-query-id
|
mas01cr@511
|
82 (datum (* adb-datum-t))
|
mas01cr@511
|
83 (sequence-length (unsigned 32))
|
mas01cr@511
|
84 (flags (unsigned 32))
|
mas01cr@511
|
85 (sequence-start (unsigned 32))))
|
mas01cr@511
|
86
|
mas01cr@511
|
87 (define-alien-type adb-query-parameters-t
|
mas01cr@673
|
88 (struct adb-query-parameters
|
mas01cr@511
|
89 (accumulation (unsigned 32))
|
mas01cr@511
|
90 (distance (unsigned 32))
|
mas01cr@511
|
91 (npoints (unsigned 32))
|
mas01cr@511
|
92 (ntracks (unsigned 32))))
|
mas01cr@511
|
93
|
mas01cr@511
|
94 (define-alien-type adb-keylist-t
|
mas01cr@673
|
95 (struct adb-key-list
|
mas01cr@511
|
96 (nkeys (unsigned 32))
|
mas01cr@511
|
97 (keys (* c-string))))
|
mas01cr@511
|
98
|
mas01cr@511
|
99 (define-alien-type adb-query-refine-t
|
mas01cr@673
|
100 (struct adb-query-refine
|
mas01cr@511
|
101 (flags (unsigned 32))
|
mas01cr@511
|
102 (include adb-keylist-t)
|
mas01cr@511
|
103 (exclude adb-keylist-t)
|
mas01cr@511
|
104 (radius double)
|
mas01cr@511
|
105 (absolute-threshold double)
|
mas01cr@511
|
106 (relative-threshold double)
|
mas01cr@511
|
107 (duration-ratio double)
|
mas01cr@677
|
108 (qhopsize (unsigned 32))
|
mas01cr@677
|
109 (ihopsize (unsigned 32))))
|
mas01cr@511
|
110
|
mas01cr@511
|
111 (define-alien-type adb-query-spec-t
|
mas01cr@673
|
112 (struct adb-query-spec
|
mas01cr@511
|
113 (qid adb-query-id-t)
|
mas01cr@511
|
114 (params adb-query-parameters-t)
|
mas01cr@511
|
115 (refine adb-query-refine-t)))
|
mas01cr@511
|
116
|
mas01cr@511
|
117 (define-alien-type adb-result-t
|
mas01cr@673
|
118 (struct adb-result
|
mas01cr@672
|
119 (qkey c-string)
|
mas01cr@672
|
120 (ikey c-string)
|
mas01cr@511
|
121 (qpos (unsigned 32))
|
mas01cr@672
|
122 (ipos (unsigned 32))
|
mas01cr@672
|
123 (dist double)))
|
mas01cr@511
|
124
|
mas01cr@511
|
125 (define-alien-type adb-query-results-t
|
mas01cr@673
|
126 (struct adb-query-results
|
mas01cr@511
|
127 (nresults (unsigned 32))
|
mas01cr@511
|
128 (results (* adb-result-t))))
|
mas01cr@511
|
129
|
mas01cr@511
|
130 (define-alien-routine ("audiodb_query_spec" %%query) (* adb-query-results-t)
|
mas01cr@511
|
131 (adb (* adb-t))
|
mas01cr@511
|
132 (spec (* adb-query-spec-t)))
|
mas01cr@511
|
133 (define-pointer-checking-function %query (adb spec) %%query)
|
mas01cr@511
|
134
|
mas01cr@511
|
135 (define-alien-routine ("audiodb_query_free_results" %%free-query-results) int
|
mas01cr@511
|
136 (adb (* adb-t))
|
mas01cr@511
|
137 (spec (* adb-query-spec-t))
|
mas01cr@511
|
138 (results (* adb-query-results-t)))
|
mas01cr@511
|
139 (define-int-checking-function %free-query-results (adb spec results)
|
mas01cr@511
|
140 %%free-query-results)
|
mas01cr@511
|
141
|
mas01cr@646
|
142 (define-alien-type adb-track-entry-t
|
mas01cr@673
|
143 (struct adb-track-entry
|
mas01cr@646
|
144 (nvectors (unsigned 32))
|
mas01cr@646
|
145 (key c-string)))
|
mas01cr@646
|
146
|
mas01cr@646
|
147 (define-alien-type adb-liszt-results-t
|
mas01cr@673
|
148 (struct adb-liszt-results
|
mas01cr@646
|
149 (nresults (unsigned 32))
|
mas01cr@646
|
150 (entries (* adb-track-entry-t))))
|
mas01cr@646
|
151
|
mas01cr@646
|
152 (define-alien-routine ("audiodb_liszt" %%liszt) (* adb-liszt-results-t)
|
mas01cr@646
|
153 (adb (* adb-t)))
|
mas01cr@646
|
154 (define-pointer-checking-function %liszt (adb) %%liszt)
|
mas01cr@646
|
155 (define-alien-routine ("audiodb_liszt_free_results" %%free-liszt-results) int
|
mas01cr@646
|
156 (adb (* adb-t))
|
mas01cr@646
|
157 (results (* adb-liszt-results-t)))
|
mas01cr@646
|
158 (define-int-checking-function %free-liszt-results (adb results)
|
mas01cr@646
|
159 %%free-liszt-results)
|
mas01cr@646
|
160
|
mas01cr@511
|
161 (define-alien-routine ("audiodb_close" %close) void
|
mas01cr@511
|
162 (adb (* adb-t)))
|