DRY up the float parser.
authorChristopher Peplin <chris.peplin@rhubarbtech.com>
Mon, 6 Jan 2014 17:03:18 +0000 (12:03 -0500)
committerChristopher Peplin <chris.peplin@rhubarbtech.com>
Mon, 6 Jan 2014 17:03:18 +0000 (12:03 -0500)
src/canutil/read.c

index b662e9b..d0cbb71 100644 (file)
@@ -2,10 +2,14 @@
 #include <bitfield/bitfield.h>
 #include <bitfield/8byte.h>
 
+static float decode_float(uint64_t raw, float factor, float offset) {
+    return raw * factor + offset;
+}
+
 float eightbyte_parse_float(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
         float factor, float offset) {
-    uint64_t raw = eightbyte_get_bitfield(data, bit_offset, bit_size, true);
-    return raw * factor + offset;
+    return decode_float(eightbyte_get_bitfield(data, bit_offset, bit_size,
+                true), factor, offset);
 }
 
 bool eightbyte_parse_bool(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
@@ -17,10 +21,8 @@ bool eightbyte_parse_bool(uint64_t data, uint8_t bit_offset, uint8_t bit_size,
 float bitfield_parse_float(const uint8_t source[], const uint16_t source_length,
         const uint8_t bit_offset, const uint8_t bit_size, const float factor,
         const float offset) {
-    uint64_t raw = get_bitfield(source, source_length, bit_offset, bit_size);
-    // TODO seems dumb that this is repeated from eightbyte_parse_float - is it
-    // really worth keeping around these two implementations?
-    return raw * factor + offset;
+    return decode_float(get_bitfield(source, source_length, bit_offset, bit_size),
+            factor, offset);
 }
 
 bool bitfield_parse_bool(const uint8_t source[], const uint16_t source_length,