summaryrefslogtreecommitdiff
path: root/libguile/convert.c
blob: 700deaa879a0d3618512d9e66f18343c16abdf74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* Copyright (C) 2002, 2006 Free Software Foundation, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */


#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include "libguile/_scm.h"
#include "libguile/validate.h"
#include "libguile/strings.h"
#include "libguile/vectors.h"
#include "libguile/pairs.h"
#include "libguile/unif.h"
#include "libguile/srfi-4.h"

#include "libguile/convert.h"

#ifdef HAVE_STRING_H
#include <string.h>
#endif

/* char *scm_c_scm2chars (SCM obj, char *dst);
   SCM   scm_c_chars2scm (const char *src, long n);
   SCM   scm_c_chars2byvect (const char *src, long n);
*/

#define CTYPE            char
#define FROM_CTYPE       scm_from_char
#define SCM2CTYPES       scm_c_scm2chars
#define CTYPES2SCM       scm_c_chars2scm
#define CTYPES2UVECT     scm_c_chars2byvect
#if CHAR_MIN == 0
/* 'char' is unsigned. */
#define UVEC_TAG         u8
#define UVEC_CTYPE       scm_t_uint8
#else
/* 'char' is signed. */
#define UVEC_TAG         s8
#define UVEC_CTYPE       scm_t_int8
#endif
#include "libguile/convert.i.c"

/* short *scm_c_scm2shorts (SCM obj, short *dst);
   SCM scm_c_shorts2scm (const short *src, long n);
   SCM scm_c_shorts2svect (const short *src, long n);
*/

#define CTYPE            short
#define FROM_CTYPE       scm_from_short
#define SCM2CTYPES       scm_c_scm2shorts
#define CTYPES2SCM       scm_c_shorts2scm
#define CTYPES2UVECT     scm_c_shorts2svect
#define UVEC_TAG         s16
#define UVEC_CTYPE       scm_t_int16
#include "libguile/convert.i.c"

/* int *scm_c_scm2ints (SCM obj, int *dst);
   SCM scm_c_ints2scm (const int *src, long n);
   SCM scm_c_ints2ivect (const int *src, long n);
   SCM scm_c_uints2uvect (const unsigned int *src, long n);
*/

#define CTYPE            int
#define FROM_CTYPE       scm_from_int
#define SCM2CTYPES       scm_c_scm2ints
#define CTYPES2SCM       scm_c_ints2scm
#define CTYPES2UVECT     scm_c_ints2ivect
#define UVEC_TAG         s32
#define UVEC_CTYPE       scm_t_int32

#define CTYPES2UVECT_2   scm_c_uints2uvect
#define CTYPE_2          unsigned int
#define UVEC_TAG_2       u32
#define UVEC_CTYPE_2     scm_t_uint32

#include "libguile/convert.i.c"

/* long *scm_c_scm2longs (SCM obj, long *dst);
   SCM scm_c_longs2scm (const long *src, long n);
   SCM scm_c_longs2ivect (const long *src, long n);
   SCM scm_c_ulongs2uvect (const unsigned long *src, long n);
*/

#define CTYPE            long
#define FROM_CTYPE       scm_from_long
#define SCM2CTYPES       scm_c_scm2longs
#define CTYPES2SCM       scm_c_longs2scm
#define CTYPES2UVECT     scm_c_longs2ivect
#define UVEC_TAG         s32
#define UVEC_CTYPE       scm_t_int32

#define CTYPES2UVECT_2   scm_c_ulongs2uvect
#define CTYPE_2          unsigned int
#define UVEC_TAG_2       u32
#define UVEC_CTYPE_2     scm_t_uint32

#include "libguile/convert.i.c"

/* float *scm_c_scm2floats (SCM obj, float *dst);
   SCM scm_c_floats2scm (const float *src, long n);
   SCM scm_c_floats2fvect (const float *src, long n);
*/

#define CTYPE            float
#define FROM_CTYPE       scm_from_double
#define SCM2CTYPES       scm_c_scm2floats
#define CTYPES2SCM       scm_c_floats2scm
#define CTYPES2UVECT     scm_c_floats2fvect
#define UVEC_TAG         f32
#define UVEC_CTYPE       float
#include "libguile/convert.i.c"

/* double *scm_c_scm2doubles (SCM obj, double *dst);
   SCM scm_c_doubles2scm (const double *src, long n);
   SCM scm_c_doubles2dvect (const double *src, long n);
*/

#define CTYPE            double
#define FROM_CTYPE       scm_from_double
#define SCM2CTYPES       scm_c_scm2doubles
#define CTYPES2SCM       scm_c_doubles2scm
#define CTYPES2UVECT     scm_c_doubles2dvect
#define UVEC_TAG         f64
#define UVEC_CTYPE       double
#include "libguile/convert.i.c"

/*
  Local Variables:
  c-file-style: "gnu"
  End:
*/