py: Add support for float/double arrays in array module.
Addresses issue #981.
This commit is contained in:
parent
9d1ca65b59
commit
c9f8f653ad
14
py/binary.c
14
py/binary.c
|
@ -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:
|
||||
|
|
|
@ -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'))
|
Loading…
Reference in New Issue