platform-mc: Refactor units and range field PDR decode

The conversion based on range_field_format and sensor_data_size
was duplicated across each of the fields. This change adds
helper functions and thus helping with reducing some of the
duplicated code.

Change-Id: I70a5477d6743b250aea55249ccb27d2459f044e5
Signed-off-by: Amithash Prasad <amithash@meta.com>
diff --git a/platform-mc/numeric_sensor.cpp b/platform-mc/numeric_sensor.cpp
index da468b3..0c40f2c 100644
--- a/platform-mc/numeric_sensor.cpp
+++ b/platform-mc/numeric_sensor.cpp
@@ -40,6 +40,65 @@
     return true;
 }
 
+inline double getSensorDataValue(uint8_t sensor_data_size,
+                                 union_sensor_data_size& value)
+{
+    double ret = std::numeric_limits<double>::quiet_NaN();
+    switch (sensor_data_size)
+    {
+        case PLDM_SENSOR_DATA_SIZE_UINT8:
+            ret = value.value_u8;
+            break;
+        case PLDM_SENSOR_DATA_SIZE_SINT8:
+            ret = value.value_s8;
+            break;
+        case PLDM_SENSOR_DATA_SIZE_UINT16:
+            ret = value.value_u16;
+            break;
+        case PLDM_SENSOR_DATA_SIZE_SINT16:
+            ret = value.value_s16;
+            break;
+        case PLDM_SENSOR_DATA_SIZE_UINT32:
+            ret = value.value_u32;
+            break;
+        case PLDM_SENSOR_DATA_SIZE_SINT32:
+            ret = value.value_s32;
+            break;
+    }
+    return ret;
+}
+
+inline double getRangeFieldValue(uint8_t range_field_format,
+                                 union_range_field_format& value)
+{
+    double ret = std::numeric_limits<double>::quiet_NaN();
+    switch (range_field_format)
+    {
+        case PLDM_RANGE_FIELD_FORMAT_UINT8:
+            ret = value.value_u8;
+            break;
+        case PLDM_RANGE_FIELD_FORMAT_SINT8:
+            ret = value.value_s8;
+            break;
+        case PLDM_RANGE_FIELD_FORMAT_UINT16:
+            ret = value.value_u16;
+            break;
+        case PLDM_RANGE_FIELD_FORMAT_SINT16:
+            ret = value.value_s16;
+            break;
+        case PLDM_RANGE_FIELD_FORMAT_UINT32:
+            ret = value.value_u32;
+            break;
+        case PLDM_RANGE_FIELD_FORMAT_SINT32:
+            ret = value.value_s32;
+            break;
+        case PLDM_RANGE_FIELD_FORMAT_REAL32:
+            ret = value.value_f32;
+            break;
+    }
+    return ret;
+}
+
 void NumericSensor::setSensorUnit(uint8_t baseUnit)
 {
     sensorUnit = SensorUnit::DegreesC;
@@ -148,42 +207,11 @@
     associationDefinitionsIntf->associations(
         {{"chassis", "all_sensors", associationPath}});
 
-    double maxValue = std::numeric_limits<double>::quiet_NaN();
-    double minValue = std::numeric_limits<double>::quiet_NaN();
-
-    switch (pdr->sensor_data_size)
-    {
-        case PLDM_SENSOR_DATA_SIZE_UINT8:
-            maxValue = pdr->max_readable.value_u8;
-            minValue = pdr->min_readable.value_u8;
-            hysteresis = pdr->hysteresis.value_u8;
-            break;
-        case PLDM_SENSOR_DATA_SIZE_SINT8:
-            maxValue = pdr->max_readable.value_s8;
-            minValue = pdr->min_readable.value_s8;
-            hysteresis = pdr->hysteresis.value_s8;
-            break;
-        case PLDM_SENSOR_DATA_SIZE_UINT16:
-            maxValue = pdr->max_readable.value_u16;
-            minValue = pdr->min_readable.value_u16;
-            hysteresis = pdr->hysteresis.value_u16;
-            break;
-        case PLDM_SENSOR_DATA_SIZE_SINT16:
-            maxValue = pdr->max_readable.value_s16;
-            minValue = pdr->min_readable.value_s16;
-            hysteresis = pdr->hysteresis.value_s16;
-            break;
-        case PLDM_SENSOR_DATA_SIZE_UINT32:
-            maxValue = pdr->max_readable.value_u32;
-            minValue = pdr->min_readable.value_u32;
-            hysteresis = pdr->hysteresis.value_u32;
-            break;
-        case PLDM_SENSOR_DATA_SIZE_SINT32:
-            maxValue = pdr->max_readable.value_s32;
-            minValue = pdr->min_readable.value_s32;
-            hysteresis = pdr->hysteresis.value_s32;
-            break;
-    }
+    double maxValue =
+        getSensorDataValue(pdr->sensor_data_size, pdr->max_readable);
+    double minValue =
+        getSensorDataValue(pdr->sensor_data_size, pdr->min_readable);
+    hysteresis = getSensorDataValue(pdr->sensor_data_size, pdr->hysteresis);
 
     bool hasCriticalThresholds = false;
     bool hasWarningThresholds = false;
@@ -195,117 +223,29 @@
     if (pdr->supported_thresholds.bits.bit0)
     {
         hasWarningThresholds = true;
-        switch (pdr->range_field_format)
-        {
-            case PLDM_RANGE_FIELD_FORMAT_UINT8:
-                warningHigh = pdr->warning_high.value_u8;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT8:
-                warningHigh = pdr->warning_high.value_s8;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_UINT16:
-                warningHigh = pdr->warning_high.value_u16;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT16:
-                warningHigh = pdr->warning_high.value_s16;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_UINT32:
-                warningHigh = pdr->warning_high.value_u32;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT32:
-                warningHigh = pdr->warning_high.value_s32;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_REAL32:
-                warningHigh = pdr->warning_high.value_f32;
-                break;
-        }
+        warningHigh =
+            getRangeFieldValue(pdr->range_field_format, pdr->warning_high);
     }
 
     if (pdr->supported_thresholds.bits.bit3)
     {
         hasWarningThresholds = true;
-        switch (pdr->range_field_format)
-        {
-            case PLDM_RANGE_FIELD_FORMAT_UINT8:
-                warningLow = pdr->warning_low.value_u8;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT8:
-                warningLow = pdr->warning_low.value_s8;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_UINT16:
-                warningLow = pdr->warning_low.value_u16;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT16:
-                warningLow = pdr->warning_low.value_s16;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_UINT32:
-                warningLow = pdr->warning_low.value_u32;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT32:
-                warningLow = pdr->warning_low.value_s32;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_REAL32:
-                warningLow = pdr->warning_low.value_f32;
-                break;
-        }
+        warningLow =
+            getRangeFieldValue(pdr->range_field_format, pdr->warning_low);
     }
 
     if (pdr->supported_thresholds.bits.bit1)
     {
         hasCriticalThresholds = true;
-        switch (pdr->range_field_format)
-        {
-            case PLDM_RANGE_FIELD_FORMAT_UINT8:
-                criticalHigh = pdr->critical_high.value_u8;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT8:
-                criticalHigh = pdr->critical_high.value_s8;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_UINT16:
-                criticalHigh = pdr->critical_high.value_u16;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT16:
-                criticalHigh = pdr->critical_high.value_s16;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_UINT32:
-                criticalHigh = pdr->critical_high.value_u32;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT32:
-                criticalHigh = pdr->critical_high.value_s32;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_REAL32:
-                criticalHigh = pdr->critical_high.value_f32;
-                break;
-        }
+        criticalHigh =
+            getRangeFieldValue(pdr->range_field_format, pdr->critical_high);
     }
 
     if (pdr->supported_thresholds.bits.bit4)
     {
         hasCriticalThresholds = true;
-        switch (pdr->range_field_format)
-        {
-            case PLDM_RANGE_FIELD_FORMAT_UINT8:
-                criticalLow = pdr->critical_low.value_u8;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT8:
-                criticalLow = pdr->critical_low.value_s8;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_UINT16:
-                criticalLow = pdr->critical_low.value_u16;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT16:
-                criticalLow = pdr->critical_low.value_s16;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_UINT32:
-                criticalLow = pdr->critical_low.value_u32;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_SINT32:
-                criticalLow = pdr->critical_low.value_s32;
-                break;
-            case PLDM_RANGE_FIELD_FORMAT_REAL32:
-                criticalLow = pdr->critical_low.value_f32;
-                break;
-        }
+        criticalLow =
+            getRangeFieldValue(pdr->range_field_format, pdr->critical_low);
     }
 
     resolution = pdr->resolution;