| 110 | |
| 111 | |
| 112 | inline QByteArray join(const QList<QByteArrayView>& parts, const QByteArray& delimiter) |
| 113 | { |
| 114 | if (parts.isEmpty()) |
| 115 | return QByteArray(); |
| 116 | |
| 117 | const qsizetype dlen = delimiter.size(); |
| 118 | |
| 119 | // Compute total size |
| 120 | qsizetype total = 0; |
| 121 | for (const auto& v : parts) |
| 122 | total += v.size(); |
| 123 | total += dlen * (parts.size() - 1); |
| 124 | |
| 125 | // Allocate final QByteArray |
| 126 | QByteArray out; |
| 127 | out.resize(total); |
| 128 | |
| 129 | // Copy segments |
| 130 | char* dst = out.data(); |
| 131 | for (int i = 0; i < parts.size(); ++i) { |
| 132 | const auto& v = parts[i]; |
| 133 | |
| 134 | memcpy(dst, v.data(), v.size()); |
| 135 | dst += v.size(); |
| 136 | |
| 137 | if (i + 1 < parts.size()) { |
| 138 | memcpy(dst, delimiter.constData(), dlen); |
| 139 | dst += dlen; |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | return out; |
| 144 | } |
| 145 | |
| 146 | } // namespace ByteArrayViewUtils |
no test coverage detected