rewind the dynamic state when entering a partial continuation
[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 *
476b894c 5 * Copyright (C) 2001, 2004, 2006, 2008, 2009 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
MV
163
164#if SCM_HAVE_T_UINT64
ab7acbb7 165SCM_API SCM scm_take_u64vector (scm_t_uint64 *data, size_t n);
6e708ef2
MV
166SCM_API const scm_t_uint64 *scm_array_handle_u64_elements (scm_t_array_handle *h);
167SCM_API scm_t_uint64 *scm_array_handle_u64_writable_elements (scm_t_array_handle *h);
168SCM_API const scm_t_uint64 *scm_u64vector_elements (SCM uvec,
169 scm_t_array_handle *h,
170 size_t *lenp,
171 ssize_t *incp);
172SCM_API scm_t_uint64 *scm_u64vector_writable_elements (SCM uvec,
173 scm_t_array_handle *h,
174 size_t *lenp,
175 ssize_t *incp);
00c17d45 176#endif
f8579182
MV
177
178SCM_API SCM scm_s64vector_p (SCM obj);
179SCM_API SCM scm_make_s64vector (SCM n, SCM fill);
180SCM_API SCM scm_s64vector (SCM l);
181SCM_API SCM scm_s64vector_length (SCM uvec);
182SCM_API SCM scm_s64vector_ref (SCM uvec, SCM index);
183SCM_API SCM scm_s64vector_set_x (SCM uvec, SCM index, SCM value);
184SCM_API SCM scm_s64vector_to_list (SCM uvec);
185SCM_API SCM scm_list_to_s64vector (SCM l);
90d4368c 186SCM_API SCM scm_any_to_s64vector (SCM obj);
00c17d45
MV
187
188#if SCM_HAVE_T_INT64
ab7acbb7 189SCM_API SCM scm_take_s64vector (scm_t_int64 *data, size_t n);
6e708ef2
MV
190SCM_API const scm_t_int64 *scm_array_handle_s64_elements (scm_t_array_handle *h);
191SCM_API scm_t_int64 *scm_array_handle_s64_writable_elements (scm_t_array_handle *h);
192SCM_API const scm_t_int64 *scm_s64vector_elements (SCM uvec,
193 scm_t_array_handle *h,
194 size_t *lenp, ssize_t *incp);
195SCM_API scm_t_int64 *scm_s64vector_writable_elements (SCM uvec,
196 scm_t_array_handle *h,
197 size_t *lenp,
198 ssize_t *incp);
00c17d45 199#endif
f8579182
MV
200
201SCM_API SCM scm_f32vector_p (SCM obj);
202SCM_API SCM scm_make_f32vector (SCM n, SCM fill);
ab7acbb7 203SCM_API SCM scm_take_f32vector (float *data, size_t n);
f8579182
MV
204SCM_API SCM scm_f32vector (SCM l);
205SCM_API SCM scm_f32vector_length (SCM uvec);
206SCM_API SCM scm_f32vector_ref (SCM uvec, SCM index);
207SCM_API SCM scm_f32vector_set_x (SCM uvec, SCM index, SCM value);
208SCM_API SCM scm_f32vector_to_list (SCM uvec);
209SCM_API SCM scm_list_to_f32vector (SCM l);
90d4368c 210SCM_API SCM scm_any_to_f32vector (SCM obj);
6e708ef2
MV
211SCM_API const float *scm_array_handle_f32_elements (scm_t_array_handle *h);
212SCM_API float *scm_array_handle_f32_writable_elements (scm_t_array_handle *h);
213SCM_API const float *scm_f32vector_elements (SCM uvec,
214 scm_t_array_handle *h,
215 size_t *lenp, ssize_t *incp);
216SCM_API float *scm_f32vector_writable_elements (SCM uvec,
217 scm_t_array_handle *h,
218 size_t *lenp,
219 ssize_t *incp);
f8579182
MV
220
221SCM_API SCM scm_f64vector_p (SCM obj);
222SCM_API SCM scm_make_f64vector (SCM n, SCM fill);
ab7acbb7 223SCM_API SCM scm_take_f64vector (double *data, size_t n);
f8579182
MV
224SCM_API SCM scm_f64vector (SCM l);
225SCM_API SCM scm_f64vector_length (SCM uvec);
226SCM_API SCM scm_f64vector_ref (SCM uvec, SCM index);
227SCM_API SCM scm_f64vector_set_x (SCM uvec, SCM index, SCM value);
228SCM_API SCM scm_f64vector_to_list (SCM uvec);
229SCM_API SCM scm_list_to_f64vector (SCM l);
90d4368c 230SCM_API SCM scm_any_to_f64vector (SCM obj);
6e708ef2
MV
231SCM_API const double *scm_array_handle_f64_elements (scm_t_array_handle *h);
232SCM_API double *scm_array_handle_f64_writable_elements (scm_t_array_handle *h);
233SCM_API const double *scm_f64vector_elements (SCM uvec,
234 scm_t_array_handle *h,
235 size_t *lenp, ssize_t *incp);
236SCM_API double *scm_f64vector_writable_elements (SCM uvec,
237 scm_t_array_handle *h,
238 size_t *lenp,
239 ssize_t *incp);
f8579182 240
cbdc8379
MV
241SCM_API SCM scm_c32vector_p (SCM obj);
242SCM_API SCM scm_make_c32vector (SCM n, SCM fill);
ab7acbb7 243SCM_API SCM scm_take_c32vector (float *data, size_t n);
cbdc8379
MV
244SCM_API SCM scm_c32vector (SCM l);
245SCM_API SCM scm_c32vector_length (SCM uvec);
246SCM_API SCM scm_c32vector_ref (SCM uvec, SCM index);
247SCM_API SCM scm_c32vector_set_x (SCM uvec, SCM index, SCM value);
248SCM_API SCM scm_c32vector_to_list (SCM uvec);
249SCM_API SCM scm_list_to_c32vector (SCM l);
90d4368c 250SCM_API SCM scm_any_to_c32vector (SCM obj);
6e708ef2
MV
251SCM_API const float *scm_array_handle_c32_elements (scm_t_array_handle *h);
252SCM_API float *scm_array_handle_c32_writable_elements (scm_t_array_handle *h);
253SCM_API const float *scm_c32vector_elements (SCM uvec,
254 scm_t_array_handle *h,
255 size_t *lenp, ssize_t *incp);
256SCM_API float *scm_c32vector_writable_elements (SCM uvec,
257 scm_t_array_handle *h,
258 size_t *lenp,
259 ssize_t *incp);
cbdc8379
MV
260
261SCM_API SCM scm_c64vector_p (SCM obj);
262SCM_API SCM scm_make_c64vector (SCM n, SCM fill);
ab7acbb7 263SCM_API SCM scm_take_c64vector (double *data, size_t n);
cbdc8379
MV
264SCM_API SCM scm_c64vector (SCM l);
265SCM_API SCM scm_c64vector_length (SCM uvec);
266SCM_API SCM scm_c64vector_ref (SCM uvec, SCM index);
267SCM_API SCM scm_c64vector_set_x (SCM uvec, SCM index, SCM value);
268SCM_API SCM scm_c64vector_to_list (SCM uvec);
269SCM_API SCM scm_list_to_c64vector (SCM l);
90d4368c 270SCM_API SCM scm_any_to_c64vector (SCM obj);
6e708ef2
MV
271SCM_API const double *scm_array_handle_c64_elements (scm_t_array_handle *h);
272SCM_API double *scm_array_handle_c64_writable_elements (scm_t_array_handle *h);
273SCM_API const double *scm_c64vector_elements (SCM uvec,
274 scm_t_array_handle *h,
275 size_t *lenp, ssize_t *incp);
276SCM_API double *scm_c64vector_writable_elements (SCM uvec,
277 scm_t_array_handle *h,
278 size_t *lenp,
279 ssize_t *incp);
cbdc8379 280
102dbb6f
LC
281SCM_INTERNAL SCM scm_i_generalized_vector_type (SCM vec);
282SCM_INTERNAL const char *scm_i_uniform_vector_tag (SCM uvec);
283SCM_INTERNAL scm_i_t_array_ref scm_i_uniform_vector_ref_proc (SCM uvec);
284SCM_INTERNAL scm_i_t_array_set scm_i_uniform_vector_set_proc (SCM uvec);
e0e49670 285
ec313f0e
MV
286#if SCM_ENABLE_DEPRECATED
287
288/* Deprecated because we want people to use the scm_t_array_handle
289 interface.
290*/
291
0eb934f1 292SCM_DEPRECATED size_t scm_uniform_element_size (SCM obj);
f8579182 293
ec313f0e
MV
294#endif
295
102dbb6f 296SCM_INTERNAL void scm_init_srfi_4 (void);
f8579182
MV
297
298#endif /* SCM_SRFI_4_H */