diff options
author | Dirk Herrmann <dirk@dirk-herrmanns-seiten.de> | 2001-04-19 16:27:01 +0000 |
---|---|---|
committer | Dirk Herrmann <dirk@dirk-herrmanns-seiten.de> | 2001-04-19 16:27:01 +0000 |
commit | af7546ebe2b4340c2d0a679f0e8291266e663d9b (patch) | |
tree | bd47c03bf42bce7ac7ce22eae97a11ca46fe81ee /libguile/unif.c | |
parent | 4daecfeecc06bbd90d1e96b3eb58a7e4eeefd3a0 (diff) | |
download | guile-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.c | 64 |
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); |