@@ -1204,46 +1204,27 @@ void _lightFromHexPayload(espurna::StringView payload) {
1204
1204
}
1205
1205
}
1206
1206
1207
- template <typename T>
1208
- const char * _lightForEachToken (espurna::StringView payload, char sep, T&& callback) {
1209
- const auto begin = payload.begin ();
1210
- const auto end = payload.end ();
1211
-
1212
- auto it = begin;
1213
- for (auto last = it; it != end; ++it) {
1214
- last = it;
1215
- it = std::find (it, payload.end (), ' ,' );
1216
- if (!callback (espurna::StringView (last, it))) {
1217
- break ;
1218
- }
1219
- if (it == end) {
1220
- break ;
1221
- }
1222
- }
1223
-
1224
- return it;
1225
- }
1226
-
1227
1207
void _lightFromCommaSeparatedPayload (espurna::StringView payload, decltype(_light_channels.end()) end) {
1228
1208
auto it = _light_channels.begin ();
1229
1209
if (it == end) {
1230
1210
return ;
1231
1211
}
1232
1212
1233
1213
// every channel value is separated by a comma
1234
- _lightForEachToken (payload, ' ,' ,
1235
- [&](espurna::StringView token) {
1236
- if (it != end) {
1237
- const auto result = parseUnsigned (token, 10 );
1238
- if (result.ok ) {
1239
- (*it) = result.value ;
1240
- ++it;
1241
- return true ;
1242
- }
1243
- }
1214
+ auto split = espurna::SplitStringView (payload, ' ,' );
1215
+ while (split.next ()) {
1216
+ if (it == end) {
1217
+ break ;
1218
+ }
1244
1219
1245
- return false ;
1246
- });
1220
+ const auto result = parseUnsigned (split.current (), 10 );
1221
+ if (!result.ok ) {
1222
+ break ;
1223
+ }
1224
+
1225
+ (*it) = result.value ;
1226
+ ++it;
1227
+ }
1247
1228
1248
1229
// fill the rest with zeroes
1249
1230
while (it != end) {
@@ -1288,23 +1269,25 @@ espurna::light::Hsv _lightHsvFromPayload(espurna::StringView payload) {
1288
1269
// - S [0...100]
1289
1270
// - V [0...100]
1290
1271
const auto end = std::end (values);
1291
- const auto parsed = _lightForEachToken (payload, ' ,' ,
1292
- [&](espurna::StringView token) {
1293
- if (it != end) {
1294
- const auto result = parseUnsigned (token, 10 );
1295
- if (result.ok ) {
1296
- (*it) = result.value ;
1297
- ++it;
1298
- return true ;
1299
- }
1300
- }
1301
1272
1302
- return false ;
1303
- });
1273
+ auto split = espurna::SplitStringView (payload, ' ,' );
1274
+ while (split.next ()) {
1275
+ if (it == end) {
1276
+ break ;
1277
+ }
1278
+
1279
+ const auto result = parseUnsigned (split.current (), 10 );
1280
+ if (!result.ok ) {
1281
+ break ;
1282
+ }
1283
+
1284
+ (*it) = result.value ;
1285
+ ++it;
1286
+ }
1304
1287
1305
1288
// discard partial or uneven payloads
1306
1289
espurna::light::Hsv out;
1307
- if ((parsed != payload. end () ) || (it != end)) {
1290
+ if (split. remaining (). length ( ) || (it != end)) {
1308
1291
return out;
1309
1292
}
1310
1293
0 commit comments