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;
|
size = 8; break;
|
||||||
case 'P': case 'O': case 'S':
|
case 'P': case 'O': case 'S':
|
||||||
size = sizeof(void*); break;
|
size = sizeof(void*); break;
|
||||||
|
case 'f':
|
||||||
|
size = sizeof(float); break;
|
||||||
|
case 'd':
|
||||||
|
size = sizeof(double); break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '@': {
|
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':
|
case 'P': case 'O': case 'S':
|
||||||
align = alignof(void*);
|
align = alignof(void*);
|
||||||
size = sizeof(void*); break;
|
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) {
|
switch (typecode) {
|
||||||
#if MICROPY_PY_BUILTINS_FLOAT
|
#if MICROPY_PY_BUILTINS_FLOAT
|
||||||
case 'f':
|
case 'f':
|
||||||
((float*)p)[index] = mp_obj_float_get(val_in);
|
((float*)p)[index] = mp_obj_get_float(val_in);
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
((double*)p)[index] = mp_obj_float_get(val_in);
|
((double*)p)[index] = mp_obj_get_float(val_in);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
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