static Mapping hashToBiMap(const Hash &hash) { Mapping biMap; Hash::const_iterator it = hash.constBegin(); const Hash::const_iterator end = hash.constEnd(); for ( ; it != end; ++it) biMap.insert(Mapping::value_type(it.key(), it.value())); return biMap; }
void YAMLReaderImpl::addNode(ValueNode* node, yaml_event_t& event) { NodeInfo& info = nodeStack.top(); ValueNode* parent = info.node; if(parent->isListing()){ Listing* listing = static_cast<Listing*>(parent); listing->append(node); } else if(parent->isMapping()){ Mapping* mapping = static_cast<Mapping*>(parent); if(info.key == "<<"){ if(node->isMapping()){ mapping->insert(static_cast<Mapping*>(node)); } else if(node->isListing()){ Listing* listing = static_cast<Listing*>(node); for(auto& element : *listing){ if(element->isMapping()){ mapping->insert(static_cast<Mapping*>(element.get())); } else { ValueNode::SyntaxException ex; ex.setMessage(_("An element to merge by the \"<<\" key must be a mapping")); const yaml_mark_t& start_mark = event.start_mark; ex.setPosition(start_mark.line, start_mark.column); throw ex; } } } else { ValueNode::SyntaxException ex; ex.setMessage(_("A value to merge by the \"<<\" key must be mapping or listing")); const yaml_mark_t& start_mark = event.start_mark; ex.setPosition(start_mark.line, start_mark.column); throw ex; } } mapping->insert(info.key, node); info.key.clear(); } }