| 534 | } |
| 535 | |
| 536 | std::size_t formatFormatters(char* buffer, std::size_t bufferSize, const char* const format, BufferFormatter* const formatters, std::size_t formatterCount) { |
| 537 | std::size_t bufferOffset = 0; |
| 538 | formatWith([buffer, bufferSize, &bufferOffset](Containers::StringView data) { |
| 539 | if (buffer != nullptr) { |
| 540 | std::size_t bufferLeft = (bufferSize >= bufferOffset ? bufferSize - bufferOffset : 0); |
| 541 | std::size_t size = data.size(); |
| 542 | std::memcpy(buffer + bufferOffset, data.data(), size > bufferLeft ? bufferLeft : size); |
| 543 | DEATH_DEBUG_ASSERT(size <= bufferLeft, ("Buffer too small, expected at least {} but got {}", bufferOffset + size, bufferSize), ); |
| 544 | } |
| 545 | bufferOffset += data.size(); |
| 546 | }, [buffer, bufferSize, &bufferOffset](BufferFormatter& formatter, FormatContext& context) { |
| 547 | std::size_t size; |
| 548 | if (buffer != nullptr) { |
| 549 | std::size_t bufferLeft = (bufferSize >= bufferOffset ? bufferSize - bufferOffset : 0); |
| 550 | size = formatter({ buffer + bufferOffset, bufferLeft }, context); |
| 551 | DEATH_DEBUG_ASSERT(bufferOffset + size <= bufferSize, ("Buffer too small, expected at least {} but got {}", bufferOffset + size, bufferSize), ); |
| 552 | } else { |
| 553 | size = formatter(nullptr, context); |
| 554 | } |
| 555 | bufferOffset += size; |
| 556 | }, format, Containers::arrayView(formatters, formatterCount)); |
| 557 | return bufferOffset; |
| 558 | } |
| 559 | |
| 560 | }} |
no test coverage detected