if field.type != "mbo":
convert = None
+ args = []
+ args.append('cl')
+ args.append(str(start + field.start))
+ args.append(str(start + field.end))
+
if field.type == "address":
convert = "__gen_unpack_address"
elif field.type == "uint":
elif field.type == "offset":
convert = "__gen_unpack_offset"
elif field.type == 'ufixed':
+ args.append(str(field.fractional_size))
convert = "__gen_unpack_ufixed"
elif field.type == 'sfixed':
+ args.append(str(field.fractional_size))
convert = "__gen_unpack_sfixed"
else:
print("/* unhandled field %s, type %s */\n" % (name, field.type))
s = None
- print(" values->%s = %s(cl, %s, %s);" % \
- (field.name, convert, \
- start + field.start, start + field.end))
-
+ print(" values->%s = %s(%s);" % \
+ (field.name, convert, ', '.join(args)))
class Value(object):
def __init__(self, attrs):
return (val << (64 - size)) >> (64 - size);
}
+static inline float
+__gen_unpack_sfixed(const uint8_t *restrict cl, uint32_t start, uint32_t end,
+ uint32_t fractional_size)
+{
+ int32_t bits = __gen_unpack_sint(cl, start, end);
+ return (float)bits / (1 << fractional_size);
+}
+
+static inline float
+__gen_unpack_ufixed(const uint8_t *restrict cl, uint32_t start, uint32_t end,
+ uint32_t fractional_size)
+{
+ int32_t bits = __gen_unpack_uint(cl, start, end);
+ return (float)bits / (1 << fractional_size);
+}
+
static inline float
__gen_unpack_float(const uint8_t *restrict cl, uint32_t start, uint32_t end)
{