Commit 71e9bfa2 authored by Damien George's avatar Damien George
Browse files

py: Add mp_binary_set_val_array_from_int, to store an int directly.

parent b11b85ad
...@@ -151,11 +151,21 @@ mp_obj_t mp_binary_get_val(char struct_type, char val_type, byte **ptr) { ...@@ -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) { void mp_binary_set_val_array(char typecode, void *p, int index, mp_obj_t val_in) {
machine_int_t val = 0; switch (typecode) {
if (MP_OBJ_IS_INT(val_in)) { #if MICROPY_ENABLE_FLOAT
val = mp_obj_int_get(val_in); 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) { switch (typecode) {
case 'b': case 'b':
((int8_t*)p)[index] = val; ((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) ...@@ -187,10 +197,10 @@ void mp_binary_set_val_array(char typecode, void *p, int index, mp_obj_t val_in)
#endif #endif
#if MICROPY_ENABLE_FLOAT #if MICROPY_ENABLE_FLOAT
case 'f': case 'f':
((float*)p)[index] = mp_obj_float_get(val_in); ((float*)p)[index] = val;
break; break;
case 'd': case 'd':
((double*)p)[index] = mp_obj_float_get(val_in); ((double*)p)[index] = val;
break; break;
#endif #endif
} }
......
...@@ -6,3 +6,4 @@ int mp_binary_get_size(char typecode); ...@@ -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_array(char typecode, void *p, int index);
mp_obj_t mp_binary_get_val(char struct_type, char val_type, byte **ptr); 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(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);
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment