| 256 | } |
| 257 | |
| 258 | TQuickCgiParam::TQuickCgiParam(const TStringBuf cgiParamStr) { |
| 259 | UnescapeBuf.ReserveAndResize(CgiUnescapeBufLen(cgiParamStr.size())); |
| 260 | char* buf = UnescapeBuf.begin(); |
| 261 | |
| 262 | auto f = [this, &buf](const TStringBuf key, const TStringBuf val) { |
| 263 | TStringBuf name = CgiUnescapeBuf(buf, key); |
| 264 | buf += name.size() + 1; |
| 265 | TStringBuf value = CgiUnescapeBuf(buf, val); |
| 266 | buf += value.size() + 1; |
| 267 | Y_ASSERT(buf <= UnescapeBuf.begin() + UnescapeBuf.capacity() + 1 /*trailing zero*/); |
| 268 | emplace(name, value); |
| 269 | }; |
| 270 | |
| 271 | DoScan<false>(cgiParamStr, f); |
| 272 | |
| 273 | if (buf != UnescapeBuf.begin()) { |
| 274 | UnescapeBuf.ReserveAndResize(buf - UnescapeBuf.begin() - 1 /*trailing zero*/); |
| 275 | } |
| 276 | } |
| 277 | |
| 278 | TStringBuf TQuickCgiParam::Get(const TStringBuf name, size_t pos) const noexcept Y_LIFETIME_BOUND { |
| 279 | const auto pair = equal_range(name); |
nothing calls this directly
no test coverage detected