Skip to content

Commit 5fa5ca4

Browse files
committed
binary: Factor out mp_binary_set_int().
1 parent 539681f commit 5fa5ca4

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

py/binary.c

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,23 @@ mp_obj_t mp_binary_get_val(char struct_type, char val_type, byte **ptr) {
177177
}
178178
}
179179

180+
void mp_binary_set_int(uint val_sz, bool big_endian, byte *p, byte *val_ptr) {
181+
int in_delta, out_delta;
182+
if (big_endian) {
183+
in_delta = -1;
184+
out_delta = 1;
185+
val_ptr += val_sz - 1;
186+
} else {
187+
in_delta = out_delta = 1;
188+
}
189+
190+
for (uint i = val_sz; i > 0; i--) {
191+
*p = *val_ptr;
192+
p += out_delta;
193+
val_ptr += in_delta;
194+
}
195+
}
196+
180197
void mp_binary_set_val(char struct_type, char val_type, mp_obj_t val_in, byte **ptr) {
181198
byte *p = *ptr;
182199
uint align;
@@ -206,22 +223,7 @@ void mp_binary_set_val(char struct_type, char val_type, mp_obj_t val_in, byte **
206223
val = mp_obj_get_int(val_in);
207224
}
208225

209-
int in_delta, out_delta;
210-
uint val_sz = MIN(size, sizeof(val));
211-
if (struct_type == '>') {
212-
in_delta = -1;
213-
out_delta = 1;
214-
in += val_sz - 1;
215-
} else {
216-
in_delta = out_delta = 1;
217-
}
218-
219-
for (uint i = val_sz; i > 0; i--) {
220-
*p = *in;
221-
p += out_delta;
222-
in += in_delta;
223-
}
224-
226+
mp_binary_set_int(MIN(size, sizeof(val)), struct_type == '>', p, in);
225227
}
226228

227229
void mp_binary_set_val_array(char typecode, void *p, int index, mp_obj_t val_in) {

py/binary.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,4 @@ void mp_binary_set_val_array_from_int(char typecode, void *p, int index, mp_int_
3535
mp_obj_t mp_binary_get_val(char struct_type, char val_type, byte **ptr);
3636
void mp_binary_set_val(char struct_type, char val_type, mp_obj_t val_in, byte **ptr);
3737
mp_int_t mp_binary_get_int(uint size, bool is_signed, bool big_endian, byte *p);
38+
void mp_binary_set_int(uint val_sz, bool big_endian, byte *p, byte *val_ptr);

0 commit comments

Comments
 (0)