Skip to content

Commit 633db31

Browse files
committed
Avoid duplicated code
1 parent 99a5d7f commit 633db31

File tree

1 file changed

+34
-34
lines changed

1 file changed

+34
-34
lines changed

src/NiclaSenseEnvSerial.cpp

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ constexpr size_t IDX_REL_IAQ = 27;
6868
constexpr size_t IDX_ETHANOL = 28;
6969
constexpr size_t IDX_ODOR_INTENSITY = 47;
7070
constexpr size_t IDX_SULFUR_ODOR = 48;
71+
72+
template <typename T>
73+
struct FieldMapping {
74+
size_t idx;
75+
T NiclaSenseEnvSerial::*member;
76+
};
7177
}
7278

7379
NiclaSenseEnvSerial::NiclaSenseEnvSerial(HardwareSerial &serialPort) : _serial(&serialPort) {}
@@ -167,42 +173,36 @@ void NiclaSenseEnvSerial::processCSVLine(String data) {
167173

168174
auto fields = splitFields(data);
169175

170-
if (fields[IDX_TEMPERATURE].length()) {
171-
setFloatField(_temperature, fields[IDX_TEMPERATURE]);
172-
}
173-
if (fields[IDX_HUMIDITY].length()) {
174-
setFloatField(_humidity, fields[IDX_HUMIDITY]);
175-
}
176-
if (fields[IDX_EPA_AQI].length()) {
177-
setIntField(_epaAqi, fields[IDX_EPA_AQI]);
178-
}
179-
if (fields[IDX_FAST_AQI].length()) {
180-
setIntField(_fastAqi, fields[IDX_FAST_AQI]);
181-
}
182-
if (fields[IDX_O3].length()) {
183-
setFloatField(_o3, fields[IDX_O3]);
184-
}
185-
if (fields[IDX_NO2].length()) {
186-
setFloatField(_no2, fields[IDX_NO2]);
187-
}
188-
if (fields[IDX_IAQ].length()) {
189-
setFloatField(_iaq, fields[IDX_IAQ]);
190-
}
191-
if (fields[IDX_REL_IAQ].length()) {
192-
setFloatField(_relativeIaq, fields[IDX_REL_IAQ]);
193-
}
194-
if (fields[IDX_CO2].length()) {
195-
setFloatField(_co2, fields[IDX_CO2]);
196-
}
197-
if (fields[IDX_TVOC].length()) {
198-
setFloatField(_tvoc, fields[IDX_TVOC]);
199-
}
200-
if (fields[IDX_ETHANOL].length()) {
201-
setFloatField(_ethanol, fields[IDX_ETHANOL]);
176+
static const FieldMapping<float> floatFields[] = {
177+
{IDX_TEMPERATURE, &NiclaSenseEnvSerial::_temperature},
178+
{IDX_HUMIDITY, &NiclaSenseEnvSerial::_humidity},
179+
{IDX_O3, &NiclaSenseEnvSerial::_o3},
180+
{IDX_NO2, &NiclaSenseEnvSerial::_no2},
181+
{IDX_IAQ, &NiclaSenseEnvSerial::_iaq},
182+
{IDX_REL_IAQ, &NiclaSenseEnvSerial::_relativeIaq},
183+
{IDX_CO2, &NiclaSenseEnvSerial::_co2},
184+
{IDX_TVOC, &NiclaSenseEnvSerial::_tvoc},
185+
{IDX_ETHANOL, &NiclaSenseEnvSerial::_ethanol},
186+
{IDX_ODOR_INTENSITY, &NiclaSenseEnvSerial::_odorIntensity},
187+
};
188+
189+
for (const auto &mapping : floatFields) {
190+
if (fields[mapping.idx].length()) {
191+
setFloatField(this->*mapping.member, fields[mapping.idx]);
192+
}
202193
}
203-
if (fields[IDX_ODOR_INTENSITY].length()) {
204-
setFloatField(_odorIntensity, fields[IDX_ODOR_INTENSITY]);
194+
195+
static const FieldMapping<int> intFields[] = {
196+
{IDX_EPA_AQI, &NiclaSenseEnvSerial::_epaAqi},
197+
{IDX_FAST_AQI, &NiclaSenseEnvSerial::_fastAqi},
198+
};
199+
200+
for (const auto &mapping : intFields) {
201+
if (fields[mapping.idx].length()) {
202+
setIntField(this->*mapping.member, fields[mapping.idx]);
203+
}
205204
}
205+
206206
if (fields[IDX_SULFUR_ODOR].length()) {
207207
int odorFlag = static_cast<int>(fields[IDX_SULFUR_ODOR].toInt());
208208
_sulfurOdor = odorFlag != 0;

0 commit comments

Comments
 (0)