bool UmbrellaSerializedMessage::prepare(const McReply& reply, mc_op_t op, uint64_t reqid, struct iovec*& iovOut, size_t& niovOut) { niovOut = 0; appendInt(I32, msg_op, umbrella_op_from_mc[op]); appendInt(U64, msg_reqid, reqid); appendInt(I32, msg_result, umbrella_res_from_mc[reply.result()]); if (reply.appSpecificErrorCode()) { appendInt(I32, msg_err_code, reply.appSpecificErrorCode()); } if (reply.flags()) { appendInt(U64, msg_flags, reply.flags()); } if (reply.exptime()) { appendInt(U64, msg_exptime, reply.exptime()); } if (reply.delta()) { appendInt(U64, msg_delta, reply.delta()); } if (reply.leaseToken()) { appendInt(U64, msg_lease_id, reply.leaseToken()); } if (reply.cas()) { appendInt(U64, msg_cas, reply.cas()); } if (reply.number()) { appendInt(U64, msg_number, reply.number()); } /* TODO: if we intend to pass chained IOBufs as values, we can optimize this to write multiple iovs directly */ if (reply.hasValue()) { auto valueRange = reply.valueRangeSlow(); appendString(msg_value, reinterpret_cast<const uint8_t*>(valueRange.begin()), valueRange.size()); } /* NOTE: this check must come after all append*() calls */ if (error_) { return false; } niovOut = finalizeMessage(); iovOut = iovs_; return true; }
bool XLIFFHandler::endElement(const QString &namespaceURI, const QString& localName, const QString &qName) { Q_UNUSED(qName); if (namespaceURI == m_URITT) { if (hasContext(XC_trans_unit) || hasContext(XC_restype_plurals)) m_extra[localName] = accum; else m_translator.setExtra(localName, accum); return true; } if (namespaceURI != m_URI && namespaceURI != m_URI12) return false; //qDebug() << "URI:" << namespaceURI << "QNAME:" << qName; if (localName == QLatin1String("xliff")) { popContext(XC_xliff); } else if (localName == QLatin1String("source")) { if (hasContext(XC_alt_trans)) { if (m_isPlural && m_oldSources.isEmpty()) m_oldSources.append(QString()); m_oldSources.append(accum); m_hadAlt = true; } else { m_sources.append(accum); } } else if (localName == QLatin1String("target")) { if (popContext(XC_restype_translation)) { accum.replace(QChar(Translator::TextVariantSeparator), QChar(Translator::BinaryVariantSeparator)); m_translations.append(accum); } } else if (localName == QLatin1String("context-group")) { if (popContext(XC_context_group)) { m_refs.append(TranslatorMessage::Reference( m_extraFileName.isEmpty() ? m_fileName : m_extraFileName, m_lineNumber)); m_extraFileName.clear(); m_lineNumber = -1; } else { popContext(XC_context_group_any); } } else if (localName == QLatin1String("context")) { if (popContext(XC_context_linenumber)) { bool ok; m_lineNumber = accum.trimmed().toInt(&ok); if (!ok) m_lineNumber = -1; } else if (popContext(XC_context_filename)) { m_extraFileName = accum; } else if (popContext(XC_context_comment)) { m_comment = accum; } else if (popContext(XC_context_old_comment)) { m_oldComment = accum; } } else if (localName == QLatin1String("note")) { if (popContext(XC_extra_comment)) m_extraComment = accum; else if (popContext(XC_translator_comment)) m_translatorComment = accum; } else if (localName == QLatin1String("ph")) { m_ctype.clear(); popContext(XC_ph); } else if (localName == QLatin1String("trans-unit")) { popContext(XC_trans_unit); if (!m_hadAlt) m_oldSources.append(QString()); if (!hasContext(XC_restype_plurals)) { if (!finalizeMessage(false)) return false; } } else if (localName == QLatin1String("alt-trans")) { popContext(XC_alt_trans); } else if (localName == QLatin1String("group")) { if (popContext(XC_restype_plurals)) { if (!finalizeMessage(true)) return false; } else if (popContext(XC_restype_context)) { m_context.clear(); } else { popContext(XC_group); } } return true; }