diff options
author | Damien George <damien.p.george@gmail.com> | 2014-04-18 23:28:12 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-04-18 23:28:12 +0100 |
commit | 71e9bfa20dd02457e73c2bec85102b6faf527a33 (patch) | |
tree | 6e4cb4a0c5a9a74e01475111491aecbb92c9b273 | |
parent | b11b85adaac9ac2e460647e59f951f5086cd2d4e (diff) | |
download | micropython-71e9bfa20dd02457e73c2bec85102b6faf527a33.tar.gz micropython-71e9bfa20dd02457e73c2bec85102b6faf527a33.zip |
py: Add mp_binary_set_val_array_from_int, to store an int directly.
-rw-r--r-- | py/binary.c | 20 | ||||
-rw-r--r-- | py/binary.h | 1 |
2 files changed, 16 insertions, 5 deletions
diff --git a/py/binary.c b/py/binary.c index 1ddf4569b9..d3dd009546 100644 --- a/py/binary.c +++ b/py/binary.c @@ -151,11 +151,21 @@ mp_obj_t mp_binary_get_val(char struct_type, char val_type, byte **ptr) { } void mp_binary_set_val_array(char typecode, void *p, int index, mp_obj_t val_in) { - machine_int_t val = 0; - if (MP_OBJ_IS_INT(val_in)) { - val = mp_obj_int_get(val_in); + switch (typecode) { +#if MICROPY_ENABLE_FLOAT + case 'f': + ((float*)p)[index] = mp_obj_float_get(val_in); + break; + case 'd': + ((double*)p)[index] = mp_obj_float_get(val_in); + break; +#endif + default: + mp_binary_set_val_array_from_int(typecode, p, index, mp_obj_get_int(val_in)); } +} +void mp_binary_set_val_array_from_int(char typecode, void *p, int index, machine_int_t val) { switch (typecode) { case 'b': ((int8_t*)p)[index] = val; @@ -187,10 +197,10 @@ void mp_binary_set_val_array(char typecode, void *p, int index, mp_obj_t val_in) #endif #if MICROPY_ENABLE_FLOAT case 'f': - ((float*)p)[index] = mp_obj_float_get(val_in); + ((float*)p)[index] = val; break; case 'd': - ((double*)p)[index] = mp_obj_float_get(val_in); + ((double*)p)[index] = val; break; #endif } diff --git a/py/binary.h b/py/binary.h index e9fb38f13f..538d6e7f29 100644 --- a/py/binary.h +++ b/py/binary.h @@ -6,3 +6,4 @@ int mp_binary_get_size(char typecode); mp_obj_t mp_binary_get_val_array(char typecode, void *p, int index); mp_obj_t mp_binary_get_val(char struct_type, char val_type, byte **ptr); void mp_binary_set_val_array(char typecode, void *p, int index, mp_obj_t val_in); +void mp_binary_set_val_array_from_int(char typecode, void *p, int index, machine_int_t val); |