py: Add support for float/double arrays in array module.

Addresses issue #981.
This commit is contained in:
Damien George 2014-11-21 18:16:25 +00:00
parent 9d1ca65b59
commit c9f8f653ad
2 changed files with 26 additions and 2 deletions

View File

@ -61,6 +61,10 @@ int mp_binary_get_size(char struct_type, char val_type, mp_uint_t *palign) {
size = 8; break;
case 'P': case 'O': case 'S':
size = sizeof(void*); break;
case 'f':
size = sizeof(float); break;
case 'd':
size = sizeof(double); break;
}
break;
case '@': {
@ -90,6 +94,12 @@ int mp_binary_get_size(char struct_type, char val_type, mp_uint_t *palign) {
case 'P': case 'O': case 'S':
align = alignof(void*);
size = sizeof(void*); break;
case 'f':
align = alignof(float);
size = sizeof(float); break;
case 'd':
align = alignof(double);
size = sizeof(double); break;
}
}
}
@ -252,10 +262,10 @@ void mp_binary_set_val_array(char typecode, void *p, mp_uint_t index, mp_obj_t v
switch (typecode) {
#if MICROPY_PY_BUILTINS_FLOAT
case 'f':
((float*)p)[index] = mp_obj_float_get(val_in);
((float*)p)[index] = mp_obj_get_float(val_in);
break;
case 'd':
((double*)p)[index] = mp_obj_float_get(val_in);
((double*)p)[index] = mp_obj_get_float(val_in);
break;
#endif
default:

View File

@ -0,0 +1,14 @@
from array import array
def test(a):
print(a)
a.append(1.2)
print(len(a), '%.3f' % a[0])
a.append(1)
a.append(False)
print(len(a), '%.3f %.3f' % (a[1], a[2]))
a[-1] = 3.45
print('%.3f' % a[-1])
test(array('f'))
test(array('d'))