~peter-pearse/ubuntu/natty/guile-1.8/prop001

« back to all changes in this revision

Viewing changes to libguile/srfi-4.h

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Schepler
  • Date: 2006-11-09 03:11:16 UTC
  • Revision ID: james.westby@ubuntu.com-20061109031116-hu0q1jxqg12y6yeg
Tags: upstream-1.8.1+1
ImportĀ upstreamĀ versionĀ 1.8.1+1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef SCM_SRFI_4_H
 
2
#define SCM_SRFI_4_H
 
3
/* srfi-4.c --- Homogeneous numeric vector datatypes.
 
4
 *
 
5
 *      Copyright (C) 2001, 2004, 2006 Free Software Foundation, Inc.
 
6
 * 
 
7
 * This library is free software; you can redistribute it and/or
 
8
 * modify it under the terms of the GNU Lesser General Public
 
9
 * License as published by the Free Software Foundation; either
 
10
 * version 2.1 of the License, or (at your option) any later version.
 
11
 *
 
12
 * This library is distributed in the hope that it will be useful,
 
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
15
 * Lesser General Public License for more details.
 
16
 *
 
17
 * You should have received a copy of the GNU Lesser General Public
 
18
 * License along with this library; if not, write to the Free Software
 
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
20
 */
 
21
 
 
22
 
 
23
#include "libguile/__scm.h"
 
24
#include "libguile/unif.h"
 
25
 
 
26
/* Generic procedures.
 
27
 */
 
28
 
 
29
SCM_API SCM scm_uniform_vector_p (SCM v);
 
30
SCM_API SCM scm_uniform_vector_length (SCM v);
 
31
SCM_API SCM scm_uniform_vector_ref (SCM v, SCM idx);
 
32
SCM_API SCM scm_uniform_vector_set_x (SCM v, SCM idx, SCM val);
 
33
SCM_API SCM scm_uniform_vector_to_list (SCM v);
 
34
SCM_API SCM scm_uniform_vector_read_x (SCM v, SCM port_or_fd,
 
35
                                       SCM start, SCM end);
 
36
SCM_API SCM scm_uniform_vector_write (SCM v, SCM port_or_fd,
 
37
                                      SCM start, SCM end);
 
38
 
 
39
SCM_API int scm_is_uniform_vector (SCM obj);
 
40
SCM_API size_t scm_c_uniform_vector_length (SCM v);
 
41
SCM_API SCM scm_c_uniform_vector_ref (SCM v, size_t idx);
 
42
SCM_API void scm_c_uniform_vector_set_x (SCM v, size_t idx, SCM val);
 
43
SCM_API size_t scm_array_handle_uniform_element_size (scm_t_array_handle *h);
 
44
SCM_API const void *scm_array_handle_uniform_elements (scm_t_array_handle *h);
 
45
SCM_API void *scm_array_handle_uniform_writable_elements (scm_t_array_handle *h);
 
46
SCM_API const void *scm_uniform_vector_elements (SCM uvec, 
 
47
                                                 scm_t_array_handle *h,
 
48
                                                 size_t *lenp, ssize_t *incp);
 
49
SCM_API void *scm_uniform_vector_writable_elements (SCM uvec, 
 
50
                                                    scm_t_array_handle *h,
 
51
                                                    size_t *lenp,
 
52
                                                    ssize_t *incp);
 
53
 
 
54
/* Specific procedures.
 
55
 */
 
56
 
 
57
SCM_API SCM scm_u8vector_p (SCM obj);
 
58
SCM_API SCM scm_make_u8vector (SCM n, SCM fill);
 
59
SCM_API SCM scm_take_u8vector (scm_t_uint8 *data, size_t n);
 
60
SCM_API SCM scm_u8vector (SCM l);
 
61
SCM_API SCM scm_u8vector_length (SCM uvec);
 
62
SCM_API SCM scm_u8vector_ref (SCM uvec, SCM index);
 
63
SCM_API SCM scm_u8vector_set_x (SCM uvec, SCM index, SCM value);
 
64
SCM_API SCM scm_u8vector_to_list (SCM uvec);
 
65
SCM_API SCM scm_list_to_u8vector (SCM l);
 
66
SCM_API SCM scm_any_to_u8vector (SCM obj);
 
67
SCM_API const scm_t_uint8 *scm_array_handle_u8_elements (scm_t_array_handle *h);
 
68
SCM_API scm_t_uint8 *scm_array_handle_u8_writable_elements (scm_t_array_handle *h);
 
69
SCM_API const scm_t_uint8 *scm_u8vector_elements (SCM uvec, 
 
70
                                                  scm_t_array_handle *h,
 
71
                                                  size_t *lenp, ssize_t *incp);
 
72
SCM_API scm_t_uint8 *scm_u8vector_writable_elements (SCM uvec, 
 
73
                                                     scm_t_array_handle *h,
 
74
                                                     size_t *lenp,
 
75
                                                     ssize_t *incp);
 
76
 
 
77
SCM_API SCM scm_s8vector_p (SCM obj);
 
78
SCM_API SCM scm_make_s8vector (SCM n, SCM fill);
 
79
SCM_API SCM scm_take_s8vector (scm_t_int8 *data, size_t n);
 
80
SCM_API SCM scm_s8vector (SCM l);
 
81
SCM_API SCM scm_s8vector_length (SCM uvec);
 
82
SCM_API SCM scm_s8vector_ref (SCM uvec, SCM index);
 
83
SCM_API SCM scm_s8vector_set_x (SCM uvec, SCM index, SCM value);
 
84
SCM_API SCM scm_s8vector_to_list (SCM uvec);
 
85
SCM_API SCM scm_list_to_s8vector (SCM l);
 
86
SCM_API SCM scm_any_to_s8vector (SCM obj);
 
87
SCM_API const scm_t_int8 *scm_array_handle_s8_elements (scm_t_array_handle *h);
 
88
SCM_API scm_t_int8 *scm_array_handle_s8_writable_elements (scm_t_array_handle *h);
 
89
SCM_API const scm_t_int8 *scm_s8vector_elements (SCM uvec, 
 
90
                                                 scm_t_array_handle *h,
 
91
                                                 size_t *lenp, ssize_t *incp);
 
92
SCM_API scm_t_int8 *scm_s8vector_writable_elements (SCM uvec, 
 
93
                                                    scm_t_array_handle *h,
 
94
                                                    size_t *lenp,
 
95
                                                    ssize_t *incp);
 
96
 
 
97
SCM_API SCM scm_u16vector_p (SCM obj);
 
98
SCM_API SCM scm_make_u16vector (SCM n, SCM fill);
 
99
SCM_API SCM scm_take_u16vector (scm_t_uint16 *data, size_t n);
 
100
SCM_API SCM scm_u16vector (SCM l);
 
101
SCM_API SCM scm_u16vector_length (SCM uvec);
 
102
SCM_API SCM scm_u16vector_ref (SCM uvec, SCM index);
 
103
SCM_API SCM scm_u16vector_set_x (SCM uvec, SCM index, SCM value);
 
104
SCM_API SCM scm_u16vector_to_list (SCM uvec);
 
105
SCM_API SCM scm_list_to_u16vector (SCM l);
 
106
SCM_API SCM scm_any_to_u16vector (SCM obj);
 
107
SCM_API const scm_t_uint16 *scm_array_handle_u16_elements (scm_t_array_handle *h);
 
108
SCM_API scm_t_uint16 *scm_array_handle_u16_writable_elements (scm_t_array_handle *h);
 
109
SCM_API const scm_t_uint16 *scm_u16vector_elements (SCM uvec, 
 
110
                                                    scm_t_array_handle *h,
 
111
                                                    size_t *lenp,
 
112
                                                    ssize_t *incp);
 
113
SCM_API scm_t_uint16 *scm_u16vector_writable_elements (SCM uvec, 
 
114
                                                       scm_t_array_handle *h,
 
115
                                                       size_t *lenp,
 
116
                                                       ssize_t *incp);
 
117
 
 
118
SCM_API SCM scm_s16vector_p (SCM obj);
 
119
SCM_API SCM scm_make_s16vector (SCM n, SCM fill);
 
120
SCM_API SCM scm_take_s16vector (scm_t_int16 *data, size_t n);
 
121
SCM_API SCM scm_s16vector (SCM l);
 
122
SCM_API SCM scm_s16vector_length (SCM uvec);
 
123
SCM_API SCM scm_s16vector_ref (SCM uvec, SCM index);
 
124
SCM_API SCM scm_s16vector_set_x (SCM uvec, SCM index, SCM value);
 
125
SCM_API SCM scm_s16vector_to_list (SCM uvec);
 
126
SCM_API SCM scm_list_to_s16vector (SCM l);
 
127
SCM_API SCM scm_any_to_s16vector (SCM obj);
 
128
SCM_API const scm_t_int16 *scm_array_handle_s16_elements (scm_t_array_handle *h);
 
129
SCM_API scm_t_int16 *scm_array_handle_s16_writable_elements (scm_t_array_handle *h);
 
130
SCM_API const scm_t_int16 *scm_s16vector_elements (SCM uvec, 
 
131
                                                   scm_t_array_handle *h,
 
132
                                                   size_t *lenp, ssize_t *incp);
 
133
SCM_API scm_t_int16 *scm_s16vector_writable_elements (SCM uvec, 
 
134
                                                      scm_t_array_handle *h,
 
135
                                                      size_t *lenp,
 
136
                                                      ssize_t *incp);
 
137
 
 
138
SCM_API SCM scm_u32vector_p (SCM obj);
 
139
SCM_API SCM scm_make_u32vector (SCM n, SCM fill);
 
140
SCM_API SCM scm_take_u32vector (scm_t_uint32 *data, size_t n);
 
141
SCM_API SCM scm_u32vector (SCM l);
 
142
SCM_API SCM scm_u32vector_length (SCM uvec);
 
143
SCM_API SCM scm_u32vector_ref (SCM uvec, SCM index);
 
144
SCM_API SCM scm_u32vector_set_x (SCM uvec, SCM index, SCM value);
 
145
SCM_API SCM scm_u32vector_to_list (SCM uvec);
 
146
SCM_API SCM scm_list_to_u32vector (SCM l);
 
147
SCM_API SCM scm_any_to_u32vector (SCM obj);
 
148
SCM_API const scm_t_uint32 *scm_array_handle_u32_elements (scm_t_array_handle *h);
 
149
SCM_API scm_t_uint32 *scm_array_handle_u32_writable_elements (scm_t_array_handle *h);
 
150
SCM_API const scm_t_uint32 *scm_u32vector_elements (SCM uvec, 
 
151
                                                    scm_t_array_handle *h,
 
152
                                                    size_t *lenp,
 
153
                                                    ssize_t *incp);
 
154
SCM_API scm_t_uint32 *scm_u32vector_writable_elements (SCM uvec, 
 
155
                                                       scm_t_array_handle *h,
 
156
                                                       size_t *lenp,
 
157
                                                       ssize_t *incp);
 
158
 
 
159
SCM_API SCM scm_s32vector_p (SCM obj);
 
160
SCM_API SCM scm_make_s32vector (SCM n, SCM fill);
 
161
SCM_API SCM scm_take_s32vector (scm_t_int32 *data, size_t n);
 
162
SCM_API SCM scm_s32vector (SCM l);
 
163
SCM_API SCM scm_s32vector_length (SCM uvec);
 
164
SCM_API SCM scm_s32vector_ref (SCM uvec, SCM index);
 
165
SCM_API SCM scm_s32vector_set_x (SCM uvec, SCM index, SCM value);
 
166
SCM_API SCM scm_s32vector_to_list (SCM uvec);
 
167
SCM_API SCM scm_list_to_s32vector (SCM l);
 
168
SCM_API SCM scm_any_to_s32vector (SCM obj);
 
169
SCM_API const scm_t_int32 *scm_array_handle_s32_elements (scm_t_array_handle *h);
 
170
SCM_API scm_t_int32 *scm_array_handle_s32_writable_elements (scm_t_array_handle *h);
 
171
SCM_API const scm_t_int32 *scm_s32vector_elements (SCM uvec, 
 
172
                                                   scm_t_array_handle *h,
 
173
                                                   size_t *lenp, ssize_t *incp);
 
174
SCM_API scm_t_int32 *scm_s32vector_writable_elements (SCM uvec, 
 
175
                                                      scm_t_array_handle *h,
 
176
                                                      size_t *lenp,
 
177
                                                      ssize_t *incp);
 
178
 
 
179
SCM_API SCM scm_u64vector_p (SCM obj);
 
180
SCM_API SCM scm_make_u64vector (SCM n, SCM fill);
 
181
SCM_API SCM scm_u64vector (SCM l);
 
182
SCM_API SCM scm_u64vector_length (SCM uvec);
 
183
SCM_API SCM scm_u64vector_ref (SCM uvec, SCM index);
 
184
SCM_API SCM scm_u64vector_set_x (SCM uvec, SCM index, SCM value);
 
185
SCM_API SCM scm_u64vector_to_list (SCM uvec);
 
186
SCM_API SCM scm_list_to_u64vector (SCM l);
 
187
SCM_API SCM scm_any_to_u64vector (SCM obj);
 
188
 
 
189
#if SCM_HAVE_T_UINT64
 
190
SCM_API SCM scm_take_u64vector (scm_t_uint64 *data, size_t n);
 
191
SCM_API const scm_t_uint64 *scm_array_handle_u64_elements (scm_t_array_handle *h);
 
192
SCM_API scm_t_uint64 *scm_array_handle_u64_writable_elements (scm_t_array_handle *h);
 
193
SCM_API const scm_t_uint64 *scm_u64vector_elements (SCM uvec, 
 
194
                                                    scm_t_array_handle *h,
 
195
                                                    size_t *lenp,
 
196
                                                    ssize_t *incp);
 
197
SCM_API scm_t_uint64 *scm_u64vector_writable_elements (SCM uvec, 
 
198
                                                       scm_t_array_handle *h,
 
199
                                                       size_t *lenp,
 
200
                                                       ssize_t *incp);
 
201
#endif
 
202
 
 
203
SCM_API SCM scm_s64vector_p (SCM obj);
 
204
SCM_API SCM scm_make_s64vector (SCM n, SCM fill);
 
205
SCM_API SCM scm_s64vector (SCM l);
 
206
SCM_API SCM scm_s64vector_length (SCM uvec);
 
207
SCM_API SCM scm_s64vector_ref (SCM uvec, SCM index);
 
208
SCM_API SCM scm_s64vector_set_x (SCM uvec, SCM index, SCM value);
 
209
SCM_API SCM scm_s64vector_to_list (SCM uvec);
 
210
SCM_API SCM scm_list_to_s64vector (SCM l);
 
211
SCM_API SCM scm_any_to_s64vector (SCM obj);
 
212
 
 
213
#if SCM_HAVE_T_INT64
 
214
SCM_API SCM scm_take_s64vector (scm_t_int64 *data, size_t n);
 
215
SCM_API const scm_t_int64 *scm_array_handle_s64_elements (scm_t_array_handle *h);
 
216
SCM_API scm_t_int64 *scm_array_handle_s64_writable_elements (scm_t_array_handle *h);
 
217
SCM_API const scm_t_int64 *scm_s64vector_elements (SCM uvec, 
 
218
                                                   scm_t_array_handle *h,
 
219
                                                   size_t *lenp, ssize_t *incp);
 
220
SCM_API scm_t_int64 *scm_s64vector_writable_elements (SCM uvec, 
 
221
                                                      scm_t_array_handle *h,
 
222
                                                      size_t *lenp,
 
223
                                                      ssize_t *incp);
 
224
#endif
 
225
 
 
226
SCM_API SCM scm_f32vector_p (SCM obj);
 
227
SCM_API SCM scm_make_f32vector (SCM n, SCM fill);
 
228
SCM_API SCM scm_take_f32vector (float *data, size_t n);
 
229
SCM_API SCM scm_f32vector (SCM l);
 
230
SCM_API SCM scm_f32vector_length (SCM uvec);
 
231
SCM_API SCM scm_f32vector_ref (SCM uvec, SCM index);
 
232
SCM_API SCM scm_f32vector_set_x (SCM uvec, SCM index, SCM value);
 
233
SCM_API SCM scm_f32vector_to_list (SCM uvec);
 
234
SCM_API SCM scm_list_to_f32vector (SCM l);
 
235
SCM_API SCM scm_any_to_f32vector (SCM obj);
 
236
SCM_API const float *scm_array_handle_f32_elements (scm_t_array_handle *h);
 
237
SCM_API float *scm_array_handle_f32_writable_elements (scm_t_array_handle *h);
 
238
SCM_API const float *scm_f32vector_elements (SCM uvec, 
 
239
                                            scm_t_array_handle *h,
 
240
                                            size_t *lenp, ssize_t *incp);
 
241
SCM_API float *scm_f32vector_writable_elements (SCM uvec, 
 
242
                                                scm_t_array_handle *h,
 
243
                                                size_t *lenp,
 
244
                                                ssize_t *incp);
 
245
 
 
246
SCM_API SCM scm_f64vector_p (SCM obj);
 
247
SCM_API SCM scm_make_f64vector (SCM n, SCM fill);
 
248
SCM_API SCM scm_take_f64vector (double *data, size_t n);
 
249
SCM_API SCM scm_f64vector (SCM l);
 
250
SCM_API SCM scm_f64vector_length (SCM uvec);
 
251
SCM_API SCM scm_f64vector_ref (SCM uvec, SCM index);
 
252
SCM_API SCM scm_f64vector_set_x (SCM uvec, SCM index, SCM value);
 
253
SCM_API SCM scm_f64vector_to_list (SCM uvec);
 
254
SCM_API SCM scm_list_to_f64vector (SCM l);
 
255
SCM_API SCM scm_any_to_f64vector (SCM obj);
 
256
SCM_API const double *scm_array_handle_f64_elements (scm_t_array_handle *h);
 
257
SCM_API double *scm_array_handle_f64_writable_elements (scm_t_array_handle *h);
 
258
SCM_API const double *scm_f64vector_elements (SCM uvec, 
 
259
                                              scm_t_array_handle *h,
 
260
                                              size_t *lenp, ssize_t *incp);
 
261
SCM_API double *scm_f64vector_writable_elements (SCM uvec, 
 
262
                                                 scm_t_array_handle *h,
 
263
                                                 size_t *lenp,
 
264
                                                 ssize_t *incp);
 
265
 
 
266
SCM_API SCM scm_c32vector_p (SCM obj);
 
267
SCM_API SCM scm_make_c32vector (SCM n, SCM fill);
 
268
SCM_API SCM scm_take_c32vector (float *data, size_t n);
 
269
SCM_API SCM scm_c32vector (SCM l);
 
270
SCM_API SCM scm_c32vector_length (SCM uvec);
 
271
SCM_API SCM scm_c32vector_ref (SCM uvec, SCM index);
 
272
SCM_API SCM scm_c32vector_set_x (SCM uvec, SCM index, SCM value);
 
273
SCM_API SCM scm_c32vector_to_list (SCM uvec);
 
274
SCM_API SCM scm_list_to_c32vector (SCM l);
 
275
SCM_API SCM scm_any_to_c32vector (SCM obj);
 
276
SCM_API const float *scm_array_handle_c32_elements (scm_t_array_handle *h);
 
277
SCM_API float *scm_array_handle_c32_writable_elements (scm_t_array_handle *h);
 
278
SCM_API const float *scm_c32vector_elements (SCM uvec, 
 
279
                                             scm_t_array_handle *h,
 
280
                                             size_t *lenp, ssize_t *incp);
 
281
SCM_API float *scm_c32vector_writable_elements (SCM uvec, 
 
282
                                                scm_t_array_handle *h,
 
283
                                                size_t *lenp,
 
284
                                                ssize_t *incp);
 
285
 
 
286
SCM_API SCM scm_c64vector_p (SCM obj);
 
287
SCM_API SCM scm_make_c64vector (SCM n, SCM fill);
 
288
SCM_API SCM scm_take_c64vector (double *data, size_t n);
 
289
SCM_API SCM scm_c64vector (SCM l);
 
290
SCM_API SCM scm_c64vector_length (SCM uvec);
 
291
SCM_API SCM scm_c64vector_ref (SCM uvec, SCM index);
 
292
SCM_API SCM scm_c64vector_set_x (SCM uvec, SCM index, SCM value);
 
293
SCM_API SCM scm_c64vector_to_list (SCM uvec);
 
294
SCM_API SCM scm_list_to_c64vector (SCM l);
 
295
SCM_API SCM scm_any_to_c64vector (SCM obj);
 
296
SCM_API const double *scm_array_handle_c64_elements (scm_t_array_handle *h);
 
297
SCM_API double *scm_array_handle_c64_writable_elements (scm_t_array_handle *h);
 
298
SCM_API const double *scm_c64vector_elements (SCM uvec, 
 
299
                                              scm_t_array_handle *h,
 
300
                                              size_t *lenp, ssize_t *incp);
 
301
SCM_API double *scm_c64vector_writable_elements (SCM uvec, 
 
302
                                                 scm_t_array_handle *h,
 
303
                                                 size_t *lenp,
 
304
                                                 ssize_t *incp);
 
305
 
 
306
SCM_API SCM scm_i_generalized_vector_type (SCM vec);
 
307
SCM_API const char *scm_i_uniform_vector_tag (SCM uvec);
 
308
SCM_API scm_i_t_array_ref scm_i_uniform_vector_ref_proc (SCM uvec);
 
309
SCM_API scm_i_t_array_set scm_i_uniform_vector_set_proc (SCM uvec);
 
310
 
 
311
#if SCM_ENABLE_DEPRECATED
 
312
 
 
313
/* Deprecated because we want people to use the scm_t_array_handle
 
314
   interface.
 
315
*/
 
316
 
 
317
SCM_API size_t scm_uniform_element_size (SCM obj);
 
318
 
 
319
#endif
 
320
 
 
321
SCM_API void scm_init_srfi_4 (void);
 
322
 
 
323
#endif /* SCM_SRFI_4_H */