compile-elisp fn
[bpt/guile.git] / libguile / srfi-4.h
CommitLineData
f8579182
MV
1#ifndef SCM_SRFI_4_H
2#define SCM_SRFI_4_H
3/* srfi-4.c --- Homogeneous numeric vector datatypes.
4 *
7070f12b 5 * Copyright (C) 2001, 2004, 2006, 2008, 2009, 2010, 2011, 2014 Free Software Foundation, Inc.
f8579182
MV
6 *
7 * This library is free software; you can redistribute it and/or
53befeb7
NJ
8 * modify it under the terms of the GNU Lesser General Public License
9 * as published by the Free Software Foundation; either version 3 of
10 * the License, or (at your option) any later version.
f8579182 11 *
53befeb7
NJ
12 * This library is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
f8579182
MV
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
53befeb7
NJ
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 * 02110-1301 USA
f8579182
MV
21 */
22\f
23
24#include "libguile/__scm.h"
e0e49670 25
a2689737
AW
26SCM_API SCM scm_make_srfi_4_vector (SCM type, SCM len, SCM fill);
27
28
e0e49670
MV
29/* Specific procedures.
30 */
31
f8579182
MV
32SCM_API SCM scm_u8vector_p (SCM obj);
33SCM_API SCM scm_make_u8vector (SCM n, SCM fill);
ab7acbb7 34SCM_API SCM scm_take_u8vector (scm_t_uint8 *data, size_t n);
f8579182
MV
35SCM_API SCM scm_u8vector (SCM l);
36SCM_API SCM scm_u8vector_length (SCM uvec);
37SCM_API SCM scm_u8vector_ref (SCM uvec, SCM index);
38SCM_API SCM scm_u8vector_set_x (SCM uvec, SCM index, SCM value);
39SCM_API SCM scm_u8vector_to_list (SCM uvec);
40SCM_API SCM scm_list_to_u8vector (SCM l);
90d4368c 41SCM_API SCM scm_any_to_u8vector (SCM obj);
6e708ef2
MV
42SCM_API const scm_t_uint8 *scm_array_handle_u8_elements (scm_t_array_handle *h);
43SCM_API scm_t_uint8 *scm_array_handle_u8_writable_elements (scm_t_array_handle *h);
44SCM_API const scm_t_uint8 *scm_u8vector_elements (SCM uvec,
45 scm_t_array_handle *h,
46 size_t *lenp, ssize_t *incp);
47SCM_API scm_t_uint8 *scm_u8vector_writable_elements (SCM uvec,
48 scm_t_array_handle *h,
49 size_t *lenp,
50 ssize_t *incp);
f8579182
MV
51
52SCM_API SCM scm_s8vector_p (SCM obj);
53SCM_API SCM scm_make_s8vector (SCM n, SCM fill);
ab7acbb7 54SCM_API SCM scm_take_s8vector (scm_t_int8 *data, size_t n);
f8579182
MV
55SCM_API SCM scm_s8vector (SCM l);
56SCM_API SCM scm_s8vector_length (SCM uvec);
57SCM_API SCM scm_s8vector_ref (SCM uvec, SCM index);
58SCM_API SCM scm_s8vector_set_x (SCM uvec, SCM index, SCM value);
59SCM_API SCM scm_s8vector_to_list (SCM uvec);
60SCM_API SCM scm_list_to_s8vector (SCM l);
90d4368c 61SCM_API SCM scm_any_to_s8vector (SCM obj);
6e708ef2
MV
62SCM_API const scm_t_int8 *scm_array_handle_s8_elements (scm_t_array_handle *h);
63SCM_API scm_t_int8 *scm_array_handle_s8_writable_elements (scm_t_array_handle *h);
64SCM_API const scm_t_int8 *scm_s8vector_elements (SCM uvec,
65 scm_t_array_handle *h,
66 size_t *lenp, ssize_t *incp);
67SCM_API scm_t_int8 *scm_s8vector_writable_elements (SCM uvec,
68 scm_t_array_handle *h,
69 size_t *lenp,
70 ssize_t *incp);
f8579182
MV
71
72SCM_API SCM scm_u16vector_p (SCM obj);
73SCM_API SCM scm_make_u16vector (SCM n, SCM fill);
ab7acbb7 74SCM_API SCM scm_take_u16vector (scm_t_uint16 *data, size_t n);
f8579182
MV
75SCM_API SCM scm_u16vector (SCM l);
76SCM_API SCM scm_u16vector_length (SCM uvec);
77SCM_API SCM scm_u16vector_ref (SCM uvec, SCM index);
78SCM_API SCM scm_u16vector_set_x (SCM uvec, SCM index, SCM value);
79SCM_API SCM scm_u16vector_to_list (SCM uvec);
80SCM_API SCM scm_list_to_u16vector (SCM l);
90d4368c 81SCM_API SCM scm_any_to_u16vector (SCM obj);
6e708ef2
MV
82SCM_API const scm_t_uint16 *scm_array_handle_u16_elements (scm_t_array_handle *h);
83SCM_API scm_t_uint16 *scm_array_handle_u16_writable_elements (scm_t_array_handle *h);
84SCM_API const scm_t_uint16 *scm_u16vector_elements (SCM uvec,
85 scm_t_array_handle *h,
86 size_t *lenp,
87 ssize_t *incp);
88SCM_API scm_t_uint16 *scm_u16vector_writable_elements (SCM uvec,
89 scm_t_array_handle *h,
90 size_t *lenp,
91 ssize_t *incp);
f8579182
MV
92
93SCM_API SCM scm_s16vector_p (SCM obj);
94SCM_API SCM scm_make_s16vector (SCM n, SCM fill);
ab7acbb7 95SCM_API SCM scm_take_s16vector (scm_t_int16 *data, size_t n);
f8579182
MV
96SCM_API SCM scm_s16vector (SCM l);
97SCM_API SCM scm_s16vector_length (SCM uvec);
98SCM_API SCM scm_s16vector_ref (SCM uvec, SCM index);
99SCM_API SCM scm_s16vector_set_x (SCM uvec, SCM index, SCM value);
100SCM_API SCM scm_s16vector_to_list (SCM uvec);
101SCM_API SCM scm_list_to_s16vector (SCM l);
90d4368c 102SCM_API SCM scm_any_to_s16vector (SCM obj);
6e708ef2
MV
103SCM_API const scm_t_int16 *scm_array_handle_s16_elements (scm_t_array_handle *h);
104SCM_API scm_t_int16 *scm_array_handle_s16_writable_elements (scm_t_array_handle *h);
105SCM_API const scm_t_int16 *scm_s16vector_elements (SCM uvec,
106 scm_t_array_handle *h,
107 size_t *lenp, ssize_t *incp);
108SCM_API scm_t_int16 *scm_s16vector_writable_elements (SCM uvec,
109 scm_t_array_handle *h,
110 size_t *lenp,
111 ssize_t *incp);
f8579182
MV
112
113SCM_API SCM scm_u32vector_p (SCM obj);
114SCM_API SCM scm_make_u32vector (SCM n, SCM fill);
ab7acbb7 115SCM_API SCM scm_take_u32vector (scm_t_uint32 *data, size_t n);
f8579182
MV
116SCM_API SCM scm_u32vector (SCM l);
117SCM_API SCM scm_u32vector_length (SCM uvec);
118SCM_API SCM scm_u32vector_ref (SCM uvec, SCM index);
119SCM_API SCM scm_u32vector_set_x (SCM uvec, SCM index, SCM value);
120SCM_API SCM scm_u32vector_to_list (SCM uvec);
121SCM_API SCM scm_list_to_u32vector (SCM l);
90d4368c 122SCM_API SCM scm_any_to_u32vector (SCM obj);
6e708ef2
MV
123SCM_API const scm_t_uint32 *scm_array_handle_u32_elements (scm_t_array_handle *h);
124SCM_API scm_t_uint32 *scm_array_handle_u32_writable_elements (scm_t_array_handle *h);
125SCM_API const scm_t_uint32 *scm_u32vector_elements (SCM uvec,
126 scm_t_array_handle *h,
127 size_t *lenp,
128 ssize_t *incp);
129SCM_API scm_t_uint32 *scm_u32vector_writable_elements (SCM uvec,
130 scm_t_array_handle *h,
131 size_t *lenp,
132 ssize_t *incp);
f8579182
MV
133
134SCM_API SCM scm_s32vector_p (SCM obj);
135SCM_API SCM scm_make_s32vector (SCM n, SCM fill);
ab7acbb7 136SCM_API SCM scm_take_s32vector (scm_t_int32 *data, size_t n);
f8579182
MV
137SCM_API SCM scm_s32vector (SCM l);
138SCM_API SCM scm_s32vector_length (SCM uvec);
139SCM_API SCM scm_s32vector_ref (SCM uvec, SCM index);
140SCM_API SCM scm_s32vector_set_x (SCM uvec, SCM index, SCM value);
141SCM_API SCM scm_s32vector_to_list (SCM uvec);
142SCM_API SCM scm_list_to_s32vector (SCM l);
90d4368c 143SCM_API SCM scm_any_to_s32vector (SCM obj);
6e708ef2
MV
144SCM_API const scm_t_int32 *scm_array_handle_s32_elements (scm_t_array_handle *h);
145SCM_API scm_t_int32 *scm_array_handle_s32_writable_elements (scm_t_array_handle *h);
146SCM_API const scm_t_int32 *scm_s32vector_elements (SCM uvec,
147 scm_t_array_handle *h,
148 size_t *lenp, ssize_t *incp);
149SCM_API scm_t_int32 *scm_s32vector_writable_elements (SCM uvec,
150 scm_t_array_handle *h,
151 size_t *lenp,
152 ssize_t *incp);
f8579182
MV
153
154SCM_API SCM scm_u64vector_p (SCM obj);
155SCM_API SCM scm_make_u64vector (SCM n, SCM fill);
156SCM_API SCM scm_u64vector (SCM l);
157SCM_API SCM scm_u64vector_length (SCM uvec);
158SCM_API SCM scm_u64vector_ref (SCM uvec, SCM index);
159SCM_API SCM scm_u64vector_set_x (SCM uvec, SCM index, SCM value);
160SCM_API SCM scm_u64vector_to_list (SCM uvec);
161SCM_API SCM scm_list_to_u64vector (SCM l);
90d4368c 162SCM_API SCM scm_any_to_u64vector (SCM obj);
00c17d45 163
ab7acbb7 164SCM_API SCM scm_take_u64vector (scm_t_uint64 *data, size_t n);
6e708ef2
MV
165SCM_API const scm_t_uint64 *scm_array_handle_u64_elements (scm_t_array_handle *h);
166SCM_API scm_t_uint64 *scm_array_handle_u64_writable_elements (scm_t_array_handle *h);
167SCM_API const scm_t_uint64 *scm_u64vector_elements (SCM uvec,
168 scm_t_array_handle *h,
169 size_t *lenp,
170 ssize_t *incp);
171SCM_API scm_t_uint64 *scm_u64vector_writable_elements (SCM uvec,
172 scm_t_array_handle *h,
173 size_t *lenp,
174 ssize_t *incp);
f8579182
MV
175
176SCM_API SCM scm_s64vector_p (SCM obj);
177SCM_API SCM scm_make_s64vector (SCM n, SCM fill);
178SCM_API SCM scm_s64vector (SCM l);
179SCM_API SCM scm_s64vector_length (SCM uvec);
180SCM_API SCM scm_s64vector_ref (SCM uvec, SCM index);
181SCM_API SCM scm_s64vector_set_x (SCM uvec, SCM index, SCM value);
182SCM_API SCM scm_s64vector_to_list (SCM uvec);
183SCM_API SCM scm_list_to_s64vector (SCM l);
90d4368c 184SCM_API SCM scm_any_to_s64vector (SCM obj);
00c17d45 185
ab7acbb7 186SCM_API SCM scm_take_s64vector (scm_t_int64 *data, size_t n);
6e708ef2
MV
187SCM_API const scm_t_int64 *scm_array_handle_s64_elements (scm_t_array_handle *h);
188SCM_API scm_t_int64 *scm_array_handle_s64_writable_elements (scm_t_array_handle *h);
189SCM_API const scm_t_int64 *scm_s64vector_elements (SCM uvec,
190 scm_t_array_handle *h,
191 size_t *lenp, ssize_t *incp);
192SCM_API scm_t_int64 *scm_s64vector_writable_elements (SCM uvec,
193 scm_t_array_handle *h,
194 size_t *lenp,
195 ssize_t *incp);
f8579182
MV
196
197SCM_API SCM scm_f32vector_p (SCM obj);
198SCM_API SCM scm_make_f32vector (SCM n, SCM fill);
ab7acbb7 199SCM_API SCM scm_take_f32vector (float *data, size_t n);
f8579182
MV
200SCM_API SCM scm_f32vector (SCM l);
201SCM_API SCM scm_f32vector_length (SCM uvec);
202SCM_API SCM scm_f32vector_ref (SCM uvec, SCM index);
203SCM_API SCM scm_f32vector_set_x (SCM uvec, SCM index, SCM value);
204SCM_API SCM scm_f32vector_to_list (SCM uvec);
205SCM_API SCM scm_list_to_f32vector (SCM l);
90d4368c 206SCM_API SCM scm_any_to_f32vector (SCM obj);
6e708ef2
MV
207SCM_API const float *scm_array_handle_f32_elements (scm_t_array_handle *h);
208SCM_API float *scm_array_handle_f32_writable_elements (scm_t_array_handle *h);
209SCM_API const float *scm_f32vector_elements (SCM uvec,
210 scm_t_array_handle *h,
211 size_t *lenp, ssize_t *incp);
212SCM_API float *scm_f32vector_writable_elements (SCM uvec,
213 scm_t_array_handle *h,
214 size_t *lenp,
215 ssize_t *incp);
f8579182
MV
216
217SCM_API SCM scm_f64vector_p (SCM obj);
218SCM_API SCM scm_make_f64vector (SCM n, SCM fill);
ab7acbb7 219SCM_API SCM scm_take_f64vector (double *data, size_t n);
f8579182
MV
220SCM_API SCM scm_f64vector (SCM l);
221SCM_API SCM scm_f64vector_length (SCM uvec);
222SCM_API SCM scm_f64vector_ref (SCM uvec, SCM index);
223SCM_API SCM scm_f64vector_set_x (SCM uvec, SCM index, SCM value);
224SCM_API SCM scm_f64vector_to_list (SCM uvec);
225SCM_API SCM scm_list_to_f64vector (SCM l);
90d4368c 226SCM_API SCM scm_any_to_f64vector (SCM obj);
6e708ef2
MV
227SCM_API const double *scm_array_handle_f64_elements (scm_t_array_handle *h);
228SCM_API double *scm_array_handle_f64_writable_elements (scm_t_array_handle *h);
229SCM_API const double *scm_f64vector_elements (SCM uvec,
230 scm_t_array_handle *h,
231 size_t *lenp, ssize_t *incp);
232SCM_API double *scm_f64vector_writable_elements (SCM uvec,
233 scm_t_array_handle *h,
234 size_t *lenp,
235 ssize_t *incp);
f8579182 236
cbdc8379
MV
237SCM_API SCM scm_c32vector_p (SCM obj);
238SCM_API SCM scm_make_c32vector (SCM n, SCM fill);
ab7acbb7 239SCM_API SCM scm_take_c32vector (float *data, size_t n);
cbdc8379
MV
240SCM_API SCM scm_c32vector (SCM l);
241SCM_API SCM scm_c32vector_length (SCM uvec);
242SCM_API SCM scm_c32vector_ref (SCM uvec, SCM index);
243SCM_API SCM scm_c32vector_set_x (SCM uvec, SCM index, SCM value);
244SCM_API SCM scm_c32vector_to_list (SCM uvec);
245SCM_API SCM scm_list_to_c32vector (SCM l);
90d4368c 246SCM_API SCM scm_any_to_c32vector (SCM obj);
6e708ef2
MV
247SCM_API const float *scm_array_handle_c32_elements (scm_t_array_handle *h);
248SCM_API float *scm_array_handle_c32_writable_elements (scm_t_array_handle *h);
249SCM_API const float *scm_c32vector_elements (SCM uvec,
250 scm_t_array_handle *h,
251 size_t *lenp, ssize_t *incp);
252SCM_API float *scm_c32vector_writable_elements (SCM uvec,
253 scm_t_array_handle *h,
254 size_t *lenp,
255 ssize_t *incp);
cbdc8379
MV
256
257SCM_API SCM scm_c64vector_p (SCM obj);
258SCM_API SCM scm_make_c64vector (SCM n, SCM fill);
ab7acbb7 259SCM_API SCM scm_take_c64vector (double *data, size_t n);
cbdc8379
MV
260SCM_API SCM scm_c64vector (SCM l);
261SCM_API SCM scm_c64vector_length (SCM uvec);
262SCM_API SCM scm_c64vector_ref (SCM uvec, SCM index);
263SCM_API SCM scm_c64vector_set_x (SCM uvec, SCM index, SCM value);
264SCM_API SCM scm_c64vector_to_list (SCM uvec);
265SCM_API SCM scm_list_to_c64vector (SCM l);
90d4368c 266SCM_API SCM scm_any_to_c64vector (SCM obj);
6e708ef2
MV
267SCM_API const double *scm_array_handle_c64_elements (scm_t_array_handle *h);
268SCM_API double *scm_array_handle_c64_writable_elements (scm_t_array_handle *h);
269SCM_API const double *scm_c64vector_elements (SCM uvec,
270 scm_t_array_handle *h,
271 size_t *lenp, ssize_t *incp);
272SCM_API double *scm_c64vector_writable_elements (SCM uvec,
273 scm_t_array_handle *h,
274 size_t *lenp,
275 ssize_t *incp);
cbdc8379 276
102dbb6f 277SCM_INTERNAL void scm_init_srfi_4 (void);
f8579182
MV
278
279#endif /* SCM_SRFI_4_H */