# HG changeset patch # User František Kučera # Date 1607193125 -3600 # Node ID c176766462c5f3a416b4c18d602afbacf8f84f05 # Parent 64f8f87924702f8d41b06ec9002a62faec7b1f0b simplify FOR cycles diff -r 64f8f8792470 -r c176766462c5 src/YAMLCommand.h --- a/src/YAMLCommand.h Sat Dec 05 19:17:21 2020 +0100 +++ b/src/YAMLCommand.h Sat Dec 05 19:32:05 2020 +0100 @@ -115,7 +115,7 @@ }; using YAMLEvent_p = std::shared_ptr; - + YAMLParser parser; std::shared_ptr writer; @@ -145,6 +145,11 @@ else throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected SCALAR, but got: " + event->getTypeName()); } + bool until(const yaml_event_type_t until, YAMLEvent_p& event) { + event = YAMLEvent_p(parser.next()); + return event && event->getType() != until; + } + void processRelation() { YAMLEvent_p event = YAMLEvent_p(parser.next()); if (event->getType() == YAML_MAPPING_START_EVENT) processRelationWithMetadata(); @@ -156,11 +161,11 @@ consumeEvent(YAML_SCALAR_EVENT, L"attribute-metadata"); consumeEvent(YAML_SEQUENCE_START_EVENT); - for (YAMLEvent_p event = YAMLEvent_p(parser.next()); event && event->getType() != YAML_SEQUENCE_END_EVENT; event = YAMLEvent_p(parser.next())) { + for (YAMLEvent_p event; until(YAML_SEQUENCE_END_EVENT, event);) { if (event->getType() != YAML_MAPPING_START_EVENT) throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected MAPPING (attribute-metadata), but got: " + event->getTypeName()); relpipe::writer::string_t name; relpipe::writer::string_t type = L"string"; - for (YAMLEvent_p event = YAMLEvent_p(parser.next()); event && event->getType() != YAML_MAPPING_END_EVENT; event = YAMLEvent_p(parser.next())) { + for (YAMLEvent_p event; until(YAML_MAPPING_END_EVENT, event);) { auto key = fetchScalarValue(event); auto value = consumeScalarEvent(); if (key == L"name") name = value; @@ -188,7 +193,7 @@ // First record: consumeEvent(YAML_MAPPING_START_EVENT); record.clear(); - for (YAMLEvent_p event = YAMLEvent_p(parser.next()); event && event->getType() != YAML_MAPPING_END_EVENT; event = YAMLEvent_p(parser.next())) { + for (YAMLEvent_p event; until(YAML_MAPPING_END_EVENT, event);) { auto name = fetchScalarValue(event); auto value = consumeScalarEvent(); attributesMetadata.push_back({name, relpipe::writer::TypeId::STRING}); @@ -202,11 +207,11 @@ } void processRecords() { - for (YAMLEvent_p event = YAMLEvent_p(parser.next()); event && event->getType() != YAML_SEQUENCE_END_EVENT; event = YAMLEvent_p(parser.next())) { + for (YAMLEvent_p event; until(YAML_SEQUENCE_END_EVENT, event);) { if (event->getType() != YAML_MAPPING_START_EVENT) throw relpipe::writer::RelpipeWriterException(L"Invalid YAML structure: expected MAPPING (record), but got: " + event->getTypeName()); record.clear(); record.resize(attributesMetadata.size()); - for (YAMLEvent_p event = YAMLEvent_p(parser.next()); event && event->getType() != YAML_MAPPING_END_EVENT; event = YAMLEvent_p(parser.next())) { + for (YAMLEvent_p event; until(YAML_MAPPING_END_EVENT, event);) { auto name = fetchScalarValue(event); auto value = consumeScalarEvent(); for (int i = 0; i < attributesMetadata.size(); i++) { @@ -237,7 +242,7 @@ consumeEvent(YAML_DOCUMENT_START_EVENT); consumeEvent(YAML_MAPPING_START_EVENT); - for (YAMLEvent_p event = YAMLEvent_p(parser.next()); event && event->getType() != YAML_MAPPING_END_EVENT; event = YAMLEvent_p(parser.next())) { + for (YAMLEvent_p event; until(YAML_MAPPING_END_EVENT, event);) { relationName = fetchScalarValue(event); attributesMetadata.clear(); processRelation();