summaryrefslogtreecommitdiff
path: root/libguile/unif.c
diff options
context:
space:
mode:
authorDirk Herrmann <dirk@dirk-herrmanns-seiten.de>2001-04-19 16:27:01 +0000
committerDirk Herrmann <dirk@dirk-herrmanns-seiten.de>2001-04-19 16:27:01 +0000
commitaf7546ebe2b4340c2d0a679f0e8291266e663d9b (patch)
treebd47c03bf42bce7ac7ce22eae97a11ca46fe81ee /libguile/unif.c
parent4daecfeecc06bbd90d1e96b3eb58a7e4eeefd3a0 (diff)
downloadguile-af7546ebe2b4340c2d0a679f0e8291266e663d9b.tar.gz
* Allow to convert an array of bytes to a list. Thanks to Masao Uebayashi.
Diffstat (limited to 'libguile/unif.c')
-rw-r--r--libguile/unif.c64
1 files changed, 36 insertions, 28 deletions
diff --git a/libguile/unif.c b/libguile/unif.c
index d183dddb9..afb0a0cf2 100644
--- a/libguile/unif.c
+++ b/libguile/unif.c
@@ -2108,36 +2108,44 @@ SCM_DEFINE (scm_array_to_list, "array->list", 1, 0, 0,
res = scm_cons (SCM_BOOL(((long *) data)[k] & mask), res);
return res;
}
- case scm_tc7_uvect: {
- long *data = (long *)SCM_VELTS(v);
- for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
- res = scm_cons(scm_ulong2num(data[k]), res);
- return res;
- }
- case scm_tc7_ivect: {
- long *data = (long *)SCM_VELTS(v);
- for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
- res = scm_cons(scm_long2num(data[k]), res);
- return res;
- }
- case scm_tc7_svect: {
- short *data;
- data = (short *)SCM_VELTS(v);
- for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
- res = scm_cons(SCM_MAKINUM (data[k]), res);
- return res;
- }
+ case scm_tc7_byvect:
+ {
+ signed char *data = (signed char *) SCM_VELTS (v);
+ scm_sizet k = SCM_UVECTOR_LENGTH (v);
+ while (k != 0)
+ res = scm_cons (SCM_MAKINUM (data[--k]), res);
+ return res;
+ }
+ case scm_tc7_uvect:
+ {
+ long *data = (long *)SCM_VELTS(v);
+ for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
+ res = scm_cons(scm_ulong2num(data[k]), res);
+ return res;
+ }
+ case scm_tc7_ivect:
+ {
+ long *data = (long *)SCM_VELTS(v);
+ for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
+ res = scm_cons(scm_long2num(data[k]), res);
+ return res;
+ }
+ case scm_tc7_svect:
+ {
+ short *data = (short *)SCM_VELTS(v);
+ for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
+ res = scm_cons(SCM_MAKINUM (data[k]), res);
+ return res;
+ }
#ifdef HAVE_LONG_LONGS
- case scm_tc7_llvect: {
- long_long *data;
- data = (long_long *)SCM_VELTS(v);
- for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
- res = scm_cons(scm_long_long2num(data[k]), res);
- return res;
- }
+ case scm_tc7_llvect:
+ {
+ long_long *data = (long_long *)SCM_VELTS(v);
+ for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
+ res = scm_cons(scm_long_long2num(data[k]), res);
+ return res;
+ }
#endif
-
-
case scm_tc7_fvect:
{
float *data = (float *) SCM_VELTS (v);